进程间通信---无名管道

发布时间:2023年12月22日

请添加图片描述

无名管道和有名管道的区别:

无名管道只能用于父进程和子进程之间通信,而有名管道可以用于任意两个进程间通信

请添加图片描述

管道工作的原理:

请添加图片描述

切记:无名管道一旦创建完成后,操作无名管道等同于操作文件,无名管道的读端/写端 都被视作一个文件。请添加图片描述

请添加图片描述

读端为pipefd[0] ,写端为pipefd[1]

请添加图片描述
代码实例:







#include<stdio.h>
#include<unistd.h> 
#include <sys/wait.h>
#include <stdlib.h>
int main()
{
        pid_t pid = 0;
        int pipefd[2];
        char c_buf[10];

        /*2 创建管道 */
        pipe(pipefd);//注意pipe()函数的用法,函数调用后pipefd会被赋值。

        /*1   创建子进程*/
        pid = fork();

        if(pid >0){
                /*父进程写入数据*/
                write(pipefd[1],"hello",6);
                wait(NULL);// 等待子进程结束
                close(pipefd[1]);//关闭管道fd
                exit(0);//退出主进程
        }
        if(0 == pid){
                /*子进程读数据*/
                read(pipefd[0],c_buf,6);
                printf("child process read : %s\n", c_buf);
                close(pipefd[0]);
                exit(0);
        }
        return 0;
}
~                                                                                                                                                 
~                                                                                                                                                 
~                                                                                                                                                 
~                          

文章来源:https://blog.csdn.net/QQ1402369668/article/details/135159193
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。