在linux系统中,无名管道一旦被创建完成后(无名管道的读端和写端相当于两个文件),
操作无名管道等同与操作文件
,无名管道的读端被视为一个文件;无名管道的写端也被视为一个文件;因此
可以使用read write fclose 函数接口来操作!
无名管道学习:
1.创建管道 pipe
2.读取/写入管道数据 read/write
3.关闭管道 close
无名管道创建:
函数原型:int pipe(int pipefd[2]);
头文件:
#include <unistd.h>
函数功能:
创建一个无名管道,一个单向的数据通道,用于进程间通信
返回值:
成功 0;
失败 -1;
参数:
pipefd被用于返回指向管道两端的两个文件描述符,其中pipefd[0] 指向管道的读端,pipefd[1]指向管道的写端
范例代码:
范例说明:父子进程间通信
#include <stdio.h>
#include <unistd.h>
int main()
{
char outbuf[1024]={0};
char inbuf[1024]="Hello World!\n";
pid_t pid=0;
int pipefd[2];
//创建无名管道 [注释:管道一定要在创建子进程之前创建,否则父进程和子进程看到的是两个不同管道]
pipe(pipefd);
//创建子进程
pid =fork();
//父进程
if(pid>0)
{
//往管道写数据
write(pipefd[1],inbuf,sizeof(inbuf));
wait();//等待
close(pipefd[1]);
_exit(0);
}
//子进程
if(pid==0)
{
//在管道的读端读取数据
read(pipefd[0],outbuf,sizeof(outbuf));
close(pipefd[0]);
printf("data is :%s\n",outbuf);
}
return 0;
}