概念
进程间通信是指子进程与父进程间的通信,一般用作父进程对子进程的控制或者子进程将其动向告诉父进程,由于进程是一个程序执行的实例,进程之间本身是无法进行通信的,故而运用一种管道将二者联系起来。当然管道并不只限于在父子进程之间通信,如果在子进程中在创建一个进程,我把它称为孙进程,那么子进程的父进程也就是爷进程,他与孙进程之间同样可以用管道进行通信。
创建一个管道
int pipe(int fd[2]);
返回值
成功返回0,失败返回错误代码
参数
fd表示一个数组,其存储的是两个文件描述符,fd[0]表示读端,fd[1]表示写端
原理图
进程B通过write函数将数据写进管道的写端,进程A在通过read函数从读端将数据读出来。
代码示例
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/wait.h>
int fd[2]={0};
char buf[100]={0};
int main()
{
int pip=pipe(fd);
if(pip!=0)
{
return 0;
}
pid_t pid=fork();
if(pid==0)
{
char arr[20]="通信成功";
write(fd[1],arr,strlen(arr));
}
else
{
wait(NULL);
read(fd[0],buf,sizeof(buf));
printf("buf=%s\n",buf);
}
return 0;
}