2011-10-25 13 views
1

古典的なスキームfork()/ pipe()、 を使って処理された親子の間のブロック転送を整理しようとしましたが、なぜ子の最初のread()それ以降のすべての読み込みは行われず、読み込み後は0以外の結果が返されます。例えばMac OSブロックの読み取り(POSIX)

:答えを待つよりも、

親、子への最初の書き込みファイル名、:

for (NSString* file in filenames) { 

     fprintf(pict_log, "send to conversion file %s\n", filename); 
     write(g_pfds[1], filename, 512); 
     memset(filename, ' ', 512); 
     read(g_pfds[0], filename, 512); 
     fprintf(pict_log, "completed for file: %s\n", filename); 
} 

子、同じですが、その逆。

while(!g_break_child) 
{ 
      memset(filename, ' ', 512); 
      int read_bytes = read(g_pfds[0], filename, 512); 
      // some processing... 
      write(g_pfds[1], filename, 512); 
     } 

各反復後に子供のread()でブロックする必要がありますが、なぜこれは起こりませんか?

答えて

1

私は双方向の転送が必要ですが、pipe()funcを通じて2つのディスクリプタを開くと、双方向転送が必要な場合に単方向のチャネルを作成しますpipe()を2回呼び出して2つの単方向パイプを作成します。

関連する問題