【问题标题】:Writing to a pipe is not working after many fork多次分叉后写入管道不起作用
【发布时间】:2014-01-28 05:42:23
【问题描述】:

我有以下测试程序,我喜欢将数据从最深的孩子发送(写入)到父母。

代码是:

#define M1 "Message One"
int main(int argc, char **argv) {
int f1[2];
char buff[32];

pipe(f1);

if (fork() == 0) {
    if (fork() == 0) {
        if (fork() == 0) {
            printf("%s :%d\n", "f1[0] :",f1[0]);
            while(read(f1[0], buff, sizeof(buff)) > 0)
                 printf("%s\n", buff);
                     return 0;
         } else {
            //do nothing
        }
    } else {
        //do nothing
    }

} else {    
    sleep(2);
    printf("%s :%d\n", "f1[1] :",f1[1]);
    if(write(f1[1], M1, sizeof(M1) < 0))
    printf("%s\n","Error");
    return 0;
}
return 0;
}

我的代码的问题是,程序没有打印消息。

我不确定这是否与许多分叉有关。

【问题讨论】:

    标签: c fork pipe ipc


    【解决方案1】:

    关闭未使用的文件描述符就可以正常工作了

    在最里面的孩子

    close(f1[1]);
    

    在父进程中

    close(f1[0]);
    

    而且行中的语法错误也被称为将其更改为

    write(f1[1], M1, sizeof(M1)) < 0)  
    

    【讨论】:

      【解决方案2】:

      将您的 if 语句更改为

      if (write(f1[1], M1, sizeof(M1)) < 0)
      

      而不是

      if(write(f1[1], M1, sizeof(M1) < 0))
      

      【讨论】:

        猜你喜欢
        • 2020-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-04
        • 2016-03-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多