【问题标题】:Mac OS blocking read (POSIX)Mac OS 阻塞读取 (POSIX)
【发布时间】:2011-10-25 10:35:24
【问题描述】:

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

例如:

父母,先将文件名写入孩子,然后等待答案:

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() 阻止,但为什么这没有发生?

【问题讨论】:

    标签: macos posix blocking


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多