2011-10-25 95 views
1

我嘗試組織使用經典方案fork()/ pipe(), 處理的父子之間的阻塞傳輸,但我不明白爲什麼只有先讀取()但所有後續的讀取都不是,除此之外,它們在讀取後不會返回零結果!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()函數打開幾個描述符時,我們因此創建了單向通道,以防雙向傳輸調用pipe()兩次創建兩個單向管道!