首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >意外管道()行为

意外管道()行为
EN

Stack Overflow用户
提问于 2017-05-20 20:37:07
回答 1查看 98关注 0票数 0

我试着让两个进程通过一个管道进行通信。我等待孩子在管道中写一个字符,然后,父母会从管道中读取字符并显示在屏幕上。问题是,我成功地在管道中编写了字符(我做了一个测试,立即从它读取,并且我看到它在管道中),但是当父母从管道中读取时,它里面什么也没有。我真的不明白为什么,一切似乎都很好。

代码语言:javascript
复制
int PID, canal[2];
if(-1 == (PID = fork()))
{
    perror("Error");
    return 0;
}
if(-1 == pipe(canal))
{
    perror("Error");
    return 0;
}
if(PID == 0)
{
    close(canal[0]);
    printf("Child\n");
    char buffer = 'C';
    if( 0 == write(canal[1], &buffer, sizeof(char)))
        printf("Didn't write anything\n");
    close(canal[1]);
}
else
{
    char readBuffer;
    wait(NULL);
    printf("Parent\n");
    close(canal[1]);
    if(read(canal[0], &readBuffer, sizeof(char)))
    {
        printf("I read: ");
        printf("%c\n", readBuffer);
    }
    close(canal[0]);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-20 20:44:09

问题是你在呼叫叉子之后调用管道。所以父母和孩子得到不同的管道副本。在调用叉之前将调用移动到管道。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44090591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档