news 2026/4/20 6:24:45

进程通信一

作者头像

张小明

前端开发工程师

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/4/18 8:30:52

RAG应用避坑指南:20个可能让你项目“翻车”的巨坑

从数据准备到生产部署&#xff0c;每一个环节都可能隐藏着致命的陷阱。 检索增强生成&#xff08;RAG&#xff09;看似优雅简洁的技术架构&#xff0c;在实际应用中却布满了"暗礁"。许多团队满怀信心地启动RAG项目&#xff0c;却在关键时刻遭遇滑铁卢。本文基于数十个…

作者头像 李华
网站建设 2026/4/18 12:53:10

文献管理效率提升指南:三步解决学术文献重复难题

文献管理效率提升指南&#xff1a;三步解决学术文献重复难题 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 一、问题诊断&#xff1a;学术文献…

作者头像 李华
网站建设 2026/4/18 7:12:21

Emby媒体服务器高级功能免费体验完整指南

Emby媒体服务器高级功能免费体验完整指南 【免费下载链接】emby-unlocked Emby with the premium Emby Premiere features unlocked. 项目地址: https://gitcode.com/gh_mirrors/em/emby-unlocked [1] 突破限制&#xff1a;媒体服务器高级功能解锁方案解析 &#x1f4c…

作者头像 李华
网站建设 2026/4/19 22:54:55

21天构建个人知识体系:Notion高效工作流指南

21天构建个人知识体系&#xff1a;Notion高效工作流指南 【免费下载链接】Obsidian-Templates A repository containing templates and scripts for #Obsidian to support the #Zettelkasten method for note-taking. 项目地址: https://gitcode.com/gh_mirrors/ob/Obsidian-…

作者头像 李华