Mac OS阻塞读取(POSIX)

时间:2011-10-25 10:35:25

标签: macos posix blocking

我尝试组织使用经典方案fork()/ pipe()处理的父子之间的阻塞传输, 但是我不明白为什么只有第一个read()in child阻塞,但所有后续读取都没有,除此之外它们在读取后返回的结果不是零!

例如:

父级,首先将文件名写入子级,而不是等待答案:

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 个答案:

答案 0 :(得分:1)

现在我可以自己回答,问题是: 在我的情况下我需要双向传输,但是当我们通过pipe()函数打开几个描述符时,我们因此创建单向通道,如果是双向传输,我们需要调用pipe()两次来创建两个单向管道!