微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于父进程使用简单管道向子进程写入消息的说明

如何解决关于父进程使用简单管道向子进程写入消息的说明

这是一个 C 程序,其中父进程尝试使用简单的管道向其子进程写入消息。得到了预期的输出

根据代码,父进程调用wait(),等待子进程退出(返回)。

另外,子进程调用了 read(),它等待通过另一个管道端写入内容

因此,两个进程不应该一直等待对方并导致死锁吗?程序怎么可能正常运行?

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#define MSGSIZE 16
char *msg1 = "Hello,Once";
char *msg2 = "Hello,Twice";
char *msg3 = "Hello,Thrice";
int main()
{
    char buff[MSGSIZE];
    int pi[2],pid,nbytes;
    if(pipe(pi) < 0) _exit(1);
    if((pid=fork()) > 0)
    {
        close(pi[0]);
        write(pi[1],msg1,MSGSIZE);
        write(pi[1],msg2,msg3,MSGSIZE);
        close(pi[1]); 
        wait(NULL);
    }
    else
    {
        close(pi[1]);
        while((nbytes = read(pi[0],buff,MSGSIZE)) > 0) printf("%s\n",buff);
        printf("Reading Completed\n");
        close(pi[0]);
        if(nbytes != 0) _exit(2);
        
    }   
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。