news 2026/5/15 21:09:31

进程通信一

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
进程通信一

进程通信一

  • 一、进程通信的目的
  • 二、匿名管道
    • 什么是管道呢?
    • 站在文件描述表的角度
    • 站在内核的角度
    • 代码实现进程通信
    • 管道特征

一、进程通信的目的

我们都知道,进程是具有独立性的,但是进程与进程之间需要进行通信,因此进程之间的通信是需要消耗资源的

①数据交流:可以将一个进程的数据交给另一个进程
②资源共享:多个进程可以共享同一块内存资源
③通知时间:可以告诉一个进程它的子进程已经退出了
④进程控制:比如调试功能,对另一个进程进行监控

结论:
①进程之间的通信是共享一块内存空间的
②这个内存空间是操作系统提供的
③为什么不直接将一个进程的地址和数据直接动态的给另一个进程呢?愿意就是进程之间具有独立性,需要第三方提供内存
④对于操作系统来说,进程就是用户,操作系统拒绝任何用户去访问操作系统,但进程之间的通信又需要内存空间,所以操作系统对底层进行了封装,提供了一系列的系统调用接口。

二、匿名管道

什么是管道呢?

管道就是把一个进程连接到另一个进程的数据流就是管道,管道本质也是一个文件,但我们访问不到它。

站在文件描述表的角度

如何进行访问呢?
每一个进程在创建后都会有一个task_struct,这个task_struct里面有一个叫做file_struct文件结构体,这个结构体里边有一个叫做文件描述表,本质就是一个数组,0 1 2下表分别对应的是stdin,stdout,stderr,对应的外设就是键盘,显示器,显示器。

见图理解进程间的通信:

站在内核的角度

代码实现进程通信

子进程传给父进程数据 代码:

#include<iostream>#include<stdio.h>#include<unistd.h>#include<sys/wait.h>#include<string>#include<cstring>usingnamespacestd;#defineNUM1024#defineN2voidWriter(intfd){string s="hello, i am a child!!!";pid_t id=getpid();charbuffer[NUM]={0};intcount=0;while(true){snprintf(buffer,sizeof(buffer),"%s-%d-%d",s.c_str(),id,count++);write(fd,buffer,strlen(buffer));sleep(1);}}voidReader(intfd){charbuffer[NUM];while(true){buffer[0]=0;size_t n=read(fd,buffer,sizeof(buffer));if(n>0){buffer[n]=0;cout<<"father pid:"<<getpid()<<": "<<"# "<<buffer<<endl;}}}intmain(){//实现进程之间的通信intarr[N]={0};intp=pipe(arr);pid_t id=fork();if(id<0){perror("fork fial!");}if(id==0){close(arr[0]);Writer(arr[1]);// 写exit(0);}close(arr[1]);Reader(arr[0]);//读pid_t fd=waitpid(id,nullptr,0);return0;}

makefile:

testfile:testfile.cc g++-o $@ $^.PHONY:clean clean:rm-f testfile

运行结果:

运行视频

管道特征

①具有血缘关系的进程才能进行进程间的通信
②管道只能是单项的
③父子进程是会进程协同的,同步与互斥的 —保护管道文件的数据安全
④管道是面向字节流的
⑤管道是基于文件的,而文件的生命周期是随进程的

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 13:52:01

SpringBoot+Vue +周边游平台平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

摘要 随着旅游业的发展和人们生活水平的提高&#xff0c;周边游逐渐成为大众休闲娱乐的重要选择。传统的旅游服务模式存在信息不对称、预订流程繁琐、用户体验不佳等问题&#xff0c;难以满足现代游客的个性化需求。互联网技术的快速发展为旅游行业提供了新的解决方案&#xf…

作者头像 李华
网站建设 2026/5/13 21:44:24

基于SpringBoot+Vue的政府管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】

摘要 随着信息技术的快速发展&#xff0c;数字化政务管理已成为提升政府工作效率和服务质量的重要手段。传统政府管理系统中存在信息孤岛、数据冗余、响应速度慢等问题&#xff0c;亟需通过信息化手段实现业务流程的优化和数据的集中管理。政府管理系统通过整合各部门资源&…

作者头像 李华
网站建设 2026/5/14 1:18:21

Emby高级功能解锁与媒体服务器配置全指南

Emby高级功能解锁与媒体服务器配置全指南 【免费下载链接】emby-unlocked Emby with the premium Emby Premiere features unlocked. 项目地址: https://gitcode.com/gh_mirrors/em/emby-unlocked 想要低成本体验Emby媒体服务器的高级功能&#xff1f;通过科学配置实现E…

作者头像 李华
网站建设 2026/5/14 18:40:34

为什么前后端分离了,我们比从前更痛苦?

引言&#xff1a;技术进步的悖论前后端分离是近年来Web开发领域最重要的架构变革之一&#xff0c;它代表着专业化分工的进步&#xff0c;理论上应提升开发效率和应用质量。然而在实践中&#xff0c;许多团队却发现自己陷入了新的困境&#xff1a;沟通成本指数级上升接口联调成为…

作者头像 李华