发布时间:2022-07-04 文章分类:编程知识 投稿人:王小丽 字号: 默认 | | 超大 打印
进程间通信:管道

翻开高级unix编程,仔细看了一下管道,并将书中的例子修改并实现。
虽然很简单,确揭示了多进程编程的基础。
用管道非常真是非常的简单。以前只是看了,没有实践!

进程间通信:管道  专职C++  C++博客#include<common.h>
进程间通信:管道  专职C++  C++博客
进程间通信:管道  专职C++  C++博客
#defineMAXLINE256
进程间通信:管道  专职C++  C++博客
intmain(intargc,char*argv[])
进程间通信:管道  专职C++  C++博客进程间通信:管道  专职C++  C++博客
进程间通信:管道  专职C++  C++博客{
进程间通信:管道  专职C++  C++博客
intfd[2];//管道fd
进程间通信:管道  专职C++  C++博客
pid_tpid;//子进程的PID
进程间通信:管道  专职C++  C++博客
charline[MAXLINE];
进程间通信:管道  专职C++  C++博客
进程间通信:管道  专职C++  C++博客
if((pipe(fd))<0)//创建PID,其中fd[0]为读管道,fd[1]为写管道
进程间通信:管道  专职C++  C++博客进程间通信:管道  专职C++  C++博客
进程间通信:管道  专职C++  C++博客{
进程间通信:管道  专职C++  C++博客cout
<<"pipeerror"<<endl;
进程间通信:管道  专职C++  C++博客exit(
0);
进程间通信:管道  专职C++  C++博客}

进程间通信:管道  专职C++  C++博客
进程间通信:管道  专职C++  C++博客
if((pid=fork())<0)//创建子进程
进程间通信:管道  专职C++  C++博客进程间通信:管道  专职C++  C++博客
进程间通信:管道  专职C++  C++博客{
进程间通信:管道  专职C++  C++博客cout
<<"forkerror"<<endl;//一般是进程过多的时候才会出错
进程间通信:管道  专职C++  C++博客
exit(0);
进程间通信:管道  专职C++  C++博客}

进程间通信:管道  专职C++  C++博客
//执行fork后,当前进程会得到子进程的pid,而子进程得到的是0,可以通过getppid()取得父进程
进程间通信:管道  专职C++  C++博客
if(pid>0)
进程间通信:管道  专职C++  C++博客进程间通信:管道  专职C++  C++博客
进程间通信:管道  专职C++  C++博客{
进程间通信:管道  专职C++  C++博客
//父进程向管道写数据
进程间通信:管道  专职C++  C++博客
charbuffer[MAXLINE];
进程间通信:管道  专职C++  C++博客close(fd[
0]);
进程间通信:管道  专职C++  C++博客cout
<<"input:";
进程间通信:管道  专职C++  C++博客cin.getline(buffer,MAXLINE);
进程间通信:管道  专职C++  C++博客write(fd[
1],buffer,strlen(buffer));
进程间通信:管道  专职C++  C++博客}

进程间通信:管道  专职C++  C++博客
else
进程间通信:管道  专职C++  C++博客进程间通信:管道  专职C++  C++博客
进程间通信:管道  专职C++  C++博客{
进程间通信:管道  专职C++  C++博客
//子进程接收数据
进程间通信:管道  专职C++  C++博客
close(fd[1]);
进程间通信:管道  专职C++  C++博客
intn=read(fd[0],line,MAXLINE);
进程间通信:管道  专职C++  C++博客line[n]
=0;
进程间通信:管道  专职C++  C++博客cout
<<"readmessage:"<<line<<endl;
进程间通信:管道  专职C++  C++博客}

进程间通信:管道  专职C++  C++博客
进程间通信:管道  专职C++  C++博客
return0;
进程间通信:管道  专职C++  C++博客}

进程间通信:管道  专职C++  C++博客
进程间通信:管道  专职C++  C++博客