pipe program in C

 
Thread Tools Search this Thread
Homework and Emergencies Homework & Coursework Questions pipe program in C
# 1  
Old 11-21-2010
pipe program in C

Hello guys,

my professor give me 2 days to study and make a program usign pipe, fork in c

i need to do a program

read a arq.txt
the father process read the file and the child print !


2. Relevant commands, code, scripts, algorithms:

like this

Code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>

int main (){
        int std[2];
        FILE *fp;
        unsigned char c;
        pipe(std); 
        if(fork() == 0){ 
                close(0); 
                dup(std[0]); 
                close(std[0]);
                close(std[1]); 
                exit(0); 
        }else{
                close(1); 
                dup(std[1]); 
                close(std[0]); 
                close(std[1]); 
                if(fp = fopen("arq.txt", "rb")){ 
                        fscanf(fp, "%c", &c); 
                        while(!feof(fp)){ 
                                fprintf(stdout,"%c",c); 
                                fscanf(fp, "%c", &c);   
                        }
                        fclose(fp); 
                }
                wait(0); 
        }               
        return(0);
}

but the program doesn't work
and i dont know why


4. Complete Name of School (University), City (State), Country, Name of Professor, and Course Number (Link to Course):
IST - Brazil - Rio de Janeiro - Petropolis
Teacher name: Matheus

Last edited by DukeNuke2; 11-21-2010 at 01:13 PM..
# 2  
Old 11-23-2010
The child does no i/o?

PS: It saves you deep indentation to do proper error handling in the if open:
Code:
if ( error_return == *open(...)){
  perror( "file_name_or_symbol" );
  exit( 1 );
 }
 .
 .
 .

Never repeat yourself writing a loop, it costs you the A:
Code:
while ( 1 == fscanf( ... )){
  fprintf(...);
 }

The most natural loop is to proceed with the first as if there is no loop and then when it is time to repeat a command, build the loop. Often, this means exiting from the middle, but that is cleaner than either repeating steps or goto the middle (goto is very declasse). Read man pages looking for ways the command can serve several purposes at once, like freopen(), realloc() with an initially null pointer, while ( fgets()). Also read so you can do error handling. perror() is your friend. switch(){ case } is a nice structure for io and fork situations wiht > 2 outcomes and cleanly supports comments to get that A+, like:
Code:
switch ( ret = read(...)){
 case -1:  // error handling
  perror( "read(...)" );
  exit( 1 );
 case 0:  // EOF
  exit(0);
 default:  // Good read
  char_in_buf += ret ;
  .
  .
  .
  break;
 }


Last edited by DGPickett; 11-23-2010 at 12:17 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Help on passing an input variable to the voronota program (after third pipe)

Dear UNIX forum members, I am using macbook pro 13 (2015 edition) with MAC OS Mojave and am trying to write the shell script where when it is run through terminal it asks for an input (in the code below an input variable is domains) and then that input becomes capital letter or letters which... (3 Replies)
Discussion started by: Aurimas
3 Replies

2. Shell Programming and Scripting

How to send data to previous program (pipe)?

Hi, Suppose I have a command:$ cmd1 | cmd2I need to send a message from cmd2 to cmd1 when I receive some a certain message from cmd1. How to do this? I think that I have to know cmd1's PID and then in cmd2 send a message to this PID. How? (24 Replies)
Discussion started by: JackK
24 Replies

3. Shell Programming and Scripting

How to ignore Pipe in Pipe delimited file?

Hi guys, I need to know how i can ignore Pipe '|' if Pipe is coming as a column in Pipe delimited file for eg: file 1: xx|yy|"xyz|zzz"|zzz|12... using below awk command awk 'BEGIN {FS=OFS="|" } print $3 i would get xyz But i want as : xyz|zzz to consider as whole column... (13 Replies)
Discussion started by: rohit_shinez
13 Replies

4. Shell Programming and Scripting

Replace pipe with Broken Pipe

Hi All , Is there any way to replace the pipe ( | ) with the broken pipe (0xA6) in unix (1 Reply)
Discussion started by: saj
1 Replies

5. Homework & Coursework Questions

Calling compiled C program with Perl program

Long story short: I'm working inside of a Unix SSH under a bash shell. I have to code a C program that generates a random number. Then I have to call the compiled C program with a Perl program to run the C program 20 times and put all the generated random #s into a text file, then print that text... (1 Reply)
Discussion started by: jdkirby
1 Replies

6. Programming

pipe program in C

Hello guys, my professor give me 2 days to study and make a program usign pipe, fork in c i need to do a program read a arq.txt the father process read the file and the child print ! like this #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> int main (){ ... (1 Reply)
Discussion started by: beandj
1 Replies

7. Solaris

sendmail pipe to a program.

Hello, I recently upgraded our server from Solaris 8 to 9. The sendmail is unabled to pipe the email to a perl script. I can send and received email to local and external mail, but the script did not get the email. There is no error in the log and I could not find any thing on the web. Here... (0 Replies)
Discussion started by: ld98
0 Replies

8. UNIX for Dummies Questions & Answers

Script to open program and send/execute command in program

Hi, i want to write a script that executes a program (exec?) . this program then requires a filename as input. how do i give it this input in the script so the program will be complete run and close by the script. e.g. exec prog.exe program then asks for filename "enter filename:"... (1 Reply)
Discussion started by: tuathan
1 Replies

9. Programming

C++ How to use pipe() & fork() with stdin and stdout to another program

Hi, Program A: uses pipe() I am able to read the stdout of PROGAM B (stdout got through system() command) into PROGRAM A using: * child -> dup2(fd, STDOUT_FILENO); -> execl("/path/PROGRAM B", "PROGRAM B", NULL); * parent -> char line; -> read(fd, line, 100); Question:... (2 Replies)
Discussion started by: vvaidyan
2 Replies

10. Programming

How to clear the content of a pipe (STDIN) after it is written to another program?

PROGRAM A <-> PROGRAM B PROGRAM A sends data as STDIN ro PROGRAM B and when PROGRAM B is executed from PROGRAM A, it sends output back to PROGRAM A. This is implemented using 2 pipes (fd1 & fd2). The above process happens in a loop and during the second run, the previous data that had been... (10 Replies)
Discussion started by: vvaidyan
10 Replies
Login or Register to Ask a Question