![]() |
|
|
|
|
|||||||
| Forums | Portal | Register | Forum Rules | FAQ | Contribute | Members List | Arcade | Search | Today's Posts | Mark Forums Read |
| High Level Programming Post questions about C, C++, Java, SQL, and other programming languages here. |
|
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Redirect Output Multi-Process | djodjo | High Level Programming | 3 | 03-17-2008 02:55 PM |
| redirect only the standard error output to mail | barkath | Shell Programming and Scripting | 3 | 02-08-2008 05:41 PM |
| How to redirect std err and out to log file for multi-commands? | siegfried | Shell Programming and Scripting | 1 | 08-10-2007 05:43 PM |
| Question from a newbie. How to redirect standard output | ndemos | UNIX for Dummies Questions & Answers | 1 | 07-27-2007 07:28 AM |
| redirect standard error into log file | epall | UNIX for Dummies Questions & Answers | 7 | 05-09-2006 03:29 AM |
|
|
Submit Tools | LinkBack | Thread Tools | Search this Thread | Display Modes |
|
#1
|
|||
|
|||
|
Redirect Standard Output Multi-Process
Hi,
I'm trying to compile the following code: /************** Begin <test.c> ***************/ /* * Compiled with: gcc -Wall -o test test.c */ #include <stdio.h> #include <unistd.h> int main(void) { printf("I'm process %d, son of %d \n", getpid(), getppid()); printf("Hello \n"); fork(); printf("Everyone \n"); printf("I'm process %d, son of %d \n", getpid(), getppid()); return(0); } /************** End <test.c> ***************/ I compile it like: $ gcc -Wall -o test test.c Then, if i test it leaving the output to standard output i have: $ ./test I'm process 1568, son of 1541 Hello Everyone I'm process 1568, son of 1541 Everyone I'm process 1569, son of 1 If i redirect the output to a file i have: $ ./test > file.txt $ cat file.txt I'm process 1571, son of 1541 Hello Everyone I'm process 1572, son of 1571 I'm process 1571, son of 1541 Hello Everyone I'm process 1571, son of 1541 My question is if it should happen like this. How can i redirect the output to a file and have the same as if i leave it to standard output. Why is the son process executing the print before the fork? Is it buffered text? Would like your help on this subject. Best regards, João José |
| Forum Sponsor | ||
|
|
|
#2
|
|||
|
|||
|
RE!!Redirect Standard Output Multi-Process
Hi!!
>> printf("I'm process %d, son of %d \n", getpid(), getppid()); >> printf("Hello \n"); This statements are buffered while parent execute them and redirected to a file. As you preformed fork () and redirect it to a file, this line buffers are also copied for child process. Thus u get "Hello " for child process also. |
|
#3
|
|||
|
|||
|
There is no way to predict in which order the output of two processes will be intermixed, it will vary from one invocation to the next. If you get the same result ten times in a row, that's pure chance. (Still happens.)
|
|
#4
|
|||
|
|||
|
try to put fflush(stdout) after printf
#include <stdio.h> #include <unistd.h> int main(void) { printf("I'm process %d, son of %d \n", getpid(), getppid()); printf("Hello \n"); fflush(stdout); fork(); printf("Everyone \n"); printf("I'm process %d, son of %d \n", getpid(), getppid()); fflush(stdout); return(0); } then the result will be ok |
|
#5
|
|||
|
|||
|
I think fflush() will not work for here. As standard output uses line buffer, printf() is automatically flushed using "\n"
|
|
#6
|
|||
|
|||
|
Seems to me that this is exactly what changes, when stdout is redirected to disk. But an fflush should always flush buffers, so a printf done before forking should not be written twice anymore.
|
|||
| Google The UNIX and Linux Forums |