2011-10-25 147 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()两次创建两个单向管道!