热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

意外的pipe()行为

如何解决《意外的pipe()行为》经验,为你挑选了1个好方法。

我正在尝试通过管道进行2个进程通信.我等待孩子在管道中写一个字符,然后父母将从管道中读取字符并将其显示在屏幕上.问题是我成功地在管道中写入了字符(我做了一个测试,立即从中读取,我看到它在管道中),但是当父管从管道中读取时,它内部没有任何内容.我真的不明白为什么; 一切似乎都很好.

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]);
}

Sam Hartman.. 5

问题是你调用fork后调用管道.因此父母和孩子获得管道的不同副本.在调用fork之前将调用移到管道.



1> Sam Hartman..:

问题是你调用fork后调用管道.因此父母和孩子获得管道的不同副本.在调用fork之前将调用移到管道.


推荐阅读
author-avatar
丫_龟shop
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有