Sponsored Content
Full Discussion: Pipes in C
Top Forums Programming Pipes in C Post 302392587 by petrca on Thursday 4th of February 2010 11:53:16 PM
Old 02-05-2010
Pipes in C

Hello all, I am trying to learn more about programming Unix pipes in C.
I have created a pipe that does od -bc < myfile | head
Now, I am trying to create od -bc < myfile | head | wc
Here is my code, and I know I might be off, thats why I am here so I can get some clarification.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/file.h>

int main(int argc, char *argv[]) {

   int i, filefd, pipefd[2], od_pid, head_pid, pid, wc_pid;

   for (i = 1; i < argc; i++) {
      filefd = open(argv[i], O_RDONLY);
      if (filefd < 0){
         printf("%s could not be opened\n", argv[i]);
         continue;
      }

      dup2(filefd, STDIN_FILENO);
      close(filefd);
      pipe(pipefd);

      if ((od_pid = fork()) == 0) {
         dup2(pipefd[1], STDOUT_FILENO);
         close(pipefd[0]);
         close(pipefd[1]);
         execl("/usr/bin/od", "od", "-bc", NULL);
         exit(EXIT_FAILURE);
      }

      if ((head_pid = fork()) == 0) {
         dup2(pipefd[1], STDOUT_FILENO);
         close(pipefd[0]);
         close(pipefd[1]);
         execl("/usr/bin/head","head", NULL);
         exit(EXIT_FAILURE);
      }

     if ((wc_pid = fork()) == 0) {
        dup2(pipefd[0], STDIN_FILENO);
        close(pipefd[0]);
        close(pipefd[1]);
        execl("/usr/bin/wc","wc", NULL);
        exit(EXIT_FAILURE);
     }

      close(pipefd[0]);
      close(pipefd[1]);

      do {
         pid = wait(NULL);
         if (pid == od_pid)
            od_pid = 0;
         if (pid == head_pid)
            head_pid = 0;
        if (pid == wc_pid)
            head_pid = 0;
      } while ((od_pid != 0 || head_pid != 0 || wc_pid !=0) && pid != -1);

     } /* end of for loop*/

   exit(EXIT_SUCCESS);
}

Any direction would be appreciated. Cheers.

---------- Post updated at 11:53 PM ---------- Previous update was at 11:01 PM ----------

oh ok...figured it out. I had to create another pipe to take the input from "head".

Cheers!
 

10 More Discussions You Might Find Interesting

1. Filesystems, Disks and Memory

PIPEs and Named PIPEs (FIFO) Buffer size

Hello! How I can increase or decrease predefined pipe buffer size? System FreeBSD 4.9 and RedHat Linux 9.0 Thanks! (1 Reply)
Discussion started by: Jus
1 Replies

2. Shell Programming and Scripting

cd using pipes

Hi, Can the cd command be invoked using pipes??? My actual question is slightly different. I am trying to run an executable from different folders and the path of these folders are obtained dynamically from the front end. Is there a way in which i can actually run the executable... (2 Replies)
Discussion started by: Sinbad
2 Replies

3. Programming

pipes inside

Extremely need to understand some aspects of pipes realization. The main question is in which memory are pipes placed? (13 Replies)
Discussion started by: pranki
13 Replies

4. UNIX for Advanced & Expert Users

broken pipes

A broken pipe means that you are writing onto a pipe that has been closed by the other end. i have unix batch which forks some process and these processes are communicating each other via pipes. but sometimes i got too many broken pipe error. how can i search for the cause of these errors,... (1 Reply)
Discussion started by: yakari
1 Replies

5. UNIX for Advanced & Expert Users

Consolidating Pipes

This is something I've given a lot of thought to and come up with no answer. Say you have a data stream passing from a file, through process A, into process B. Process A only modifies a few bytes of the stream, then prints the rest of the stream unmodified. Is there any way to stream the file... (4 Replies)
Discussion started by: Corona688
4 Replies

6. Shell Programming and Scripting

Help with pipes in a file

I have to add pipes for particualr number of records in a file. For eg the file has 10 records and i need to add the "|" for records numbers 7 to 10 at particular positons as shown. I need to add pipes in each of these records at positions 9, 11,,21 as like below. Can some body... (7 Replies)
Discussion started by: dsravan
7 Replies

7. Shell Programming and Scripting

named pipes

How to have a conversation between 2 processes using named pipes? (5 Replies)
Discussion started by: kanchan_agr
5 Replies

8. UNIX for Dummies Questions & Answers

Named Pipes

hi, i am working on a script for oracle export, m using a parameter file... i want to compress the dump file that is generated.. in my script following is the code i have written. i am not able to generata .gz file mknod /tmp/exp_tesd1_pipe p gzip -cNf... (4 Replies)
Discussion started by: saharookiedba
4 Replies

9. Homework & Coursework Questions

Using Pipes and Redirection

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: Create a pipe to show the number of people who are logged into the system right now. Create a pipe to show... (2 Replies)
Discussion started by: lakers34kb
2 Replies

10. Shell Programming and Scripting

Pipes with the < and >> meanings.

Hey, Well, we're starting scripting next week for my class, and I have my command done, but I don't actually understand what the meaning is, so I was just wondering if someone could "translate" this in to words so that I might be able to do this better... command1 | command2 | command3... (5 Replies)
Discussion started by: sso
5 Replies
replacekey(1)						      General Commands Manual						     replacekey(1)

NAME
replacekey - replace keywords in a FITS header SYNOPSIS
replacekey [options] <in> DESCRIPTION
replacekey is aimed at replacing keywords in a FITS file's header by new keywords provided by the user on the command-line. ALGORITHM
The user can provide a new_keyword, an old_keyword, a value and a comment. first searchs for old_keyword if provided. If it finds it, it replaces the associated card by the new one (new_keyword=value/comment). If old_keyword is either not found or not provided, associated card by the new one (new_keyword=value/comment). new_keyword has to be provided. Examples: You want to change the value of VALUE from 32 to 16 in myfile.fits: % replacekey -k "VALUE" -v "16" myfile.fits If you want to replace the card with the keyword OLD by "NEW = 3.14 / This is a usefull key" in myfile.fits: % replacekey -k "NEW" -v "3.14" -c "This is a usefull key" -K "OLD" myfile.fits If your do not care about the HISTORY cards you have in the header, and want to replace the first one by VALUE=32, you would do: % replacekey -k "VALUE" -v "32" -K "HISTORY" myfile.fits OPTIONS
-k or --key key To provide the new keyword. -K or --old key To provide the old keyword. -v or --val val To provide the new value. -c or --com com To provide the new comment. SEE ALSO
hierarch28 to convert HIERARCH ESO keywords to regular 8-char keywords. FILES
Files shall all comply with FITS format BUGS
Modifications are so far only possible in the main header, not in the extensions. 28 Oct 1999 replacekey(1)
All times are GMT -4. The time now is 09:48 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy