当前位置: 首页> 汽车> 报价 > 《TCP/IP网络编程》(第十一章)进程间通信

《TCP/IP网络编程》(第十一章)进程间通信

时间:2025/7/12 2:59:37来源:https://blog.csdn.net/m0_53115174/article/details/139277691 浏览次数: 2次

进程间通信意味着两个不同的进程间可以交换数据,它使得不同的进程能够协同工作,实现复杂的系统功能。

1.通过管道实现进程间通信

下图是基于 管道(PIPE) 的进程间通信结构模型
在这里插入图片描述
管道不属于进程的资源,属于操作系统的资源,所以两个进程可以通过操作系统提供的内存空间进行通信,下面是创建管道的函数

int pipe(int fd[2]);
//fd数组中存储了2个文件描述符
//fd[0]表示管道出口
//fd[1]表示管道入口

下面是子进程通过管道向父进程传输信息的示例:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>int main(){int fd[2];char str[]="hello PIPE";char buff[30];pipe(fd);pid_t pid=fork();if (pid==0)//子进程{write(fd[1],str,sizeof(str));//写入管道}else{//父进程read(fd[0],buff,sizeof(buff));//读取管道printf("%s\n",buff);}return 0;}

在这里插入图片描述

2.通过管道进行进程间双向通信

可以采用1个管道进行,但是不稳定,所以最好的办法就是采用2个管道进行双向通信,结构如图所示
在这里插入图片描述
下面是一个示例代码,子进程和父进程都向对方发送信息

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>int main(){int fd1[2],fd2[2];char str1[]="hello PIPE";char str2[]="hhh, Hello";char buff[30];pipe(fd1),pipe(fd2);pid_t pid=fork();if (pid==0)//子进程{write(fd1[1],str1,sizeof(str1));//子进程写给父进程的信息  "hello PIPE"read(fd2[0],buff,sizeof(buff));printf("message from papa is: %s\n",buff);}else{//父进程write(fd2[1],str2,sizeof(str2));//父进程写给子进程的信息  "hhh, Hello"read(fd1[0],buff,sizeof(buff));printf("message fromo son is: %s\n",buff);}return 0;}

在这里插入图片描述

关键字:《TCP/IP网络编程》(第十一章)进程间通信

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: