2011-09-12 10 views
1

新しいC dev。私は印刷する三つのプロセスを同期しようとしている[FATHER] [SON] [孫] [父] [SON] [孫]このコードで:3つのプロセスを同期させようとしないでください

代わり
int main(int argc, char **argv) 
{ 

    int c = 0; 
    while (c<2) 
    { 
     c++; 
     printf("[FATHER]"); 
     pid_t son = fork(); 
     if (son == 0) 
     { 
      printf("[SON]"); 
      pid_t grandson = fork(); 
      if (grandson == 0) 
      { 
       printf("[GRANDSON]"); 
       return 0; 
      } 
      wait(NULL); 
      return 0; 
     } 
     wait(NULL); 
    }; 

    } 

、イムこの出力を得る:[父] [ [息子] [父親] [父親] [父親] [父親] [息子] [父親] [父親] [父親] [父親]

私は誤解していたり​​、コードを待つ?本当にありがとう。

+0

ストリーム 'fflush(stdout)'をフラッシュして、役立つかどうか確認してください。 –

+0

また、 'fprintf(stderr、" [FATHER] ");'のようにstderrに直接書き込んでください。 –

+0

K-balloすべてのprintfの後にfflushを使用した後、完全に動作します。あなたは非常に頑張ります! – juancancela

答えて

0

代わりのprintfのすべての呼び出し後fflushを呼び出します(必要であれば最初sprintfを使用して出力文字列をフォーマット)stdoutに印刷するwriteシステムコールを使用した場合、それは良くなるだろう。 writeシステムコールではバッファリングされていない書き込みが行われるため、毎回fflushを呼び出すことを忘れることがありません。

可変長マクロを使用して、常にsprintf行とそれに続くwrite行の書き込みを避けることさえできます。

+0

あなたが提案したものを調査します。 TBH、iveはCでvariadicマクロを使ったことはありません:) – juancancela

関連する問題