使用pipe打开两个文件,完成进程间通信
注:pipe【0】为读端,pipe【1】为写端
#include <iostream>
#include <stdio.h>
#include <unistd.h>
#include <cassert>
#include <cstring>
#include <sys/wait.h>
#include <sys/types.h>
using namespace std;
#define MAX 1024
int main()
{
int pipefd[2] = {0};//存储文件标识符
int n = pipe(pipefd);
assert(n == 0);
(void)n;
int id=fork();
if(id==0)
{//子进程
close(pipefd[0]);//关闭读端
int cnt=10;
while(cnt)
{
char msg[MAX];
snprintf(msg,sizeof msg,"hello father, i'm chird,pid : %d,cnt :%d",getpid(),cnt);
cnt--;
write(pipefd[1],msg,strlen(msg));
sleep(1);
}
cout<<"child quit"<<endl;
exit(0);
}
close(pipefd[1]);//父进程关闭写端
char buffer[MAX];
while(true)
{
ssize_t cy=read(pipefd[0],buffer,sizeof buffer - 1);
if(cy>0)
{
buffer[cy]='\0';
cout<<getpid()<<","<<"chird say:"<<buffer<<endl;
}
else if(cy==0)
{
cout<<"child quit,me too"<<endl;
break;
}
cout<<"father return(val)="<<cy<<endl;
}
int rid=waitpid(id,nullptr,0);//回收子进程
if(rid == id)
{
cout<<"wait success"<<endl;
}
return 0;
}