当前位置: 首页 > news >正文

国外 wordpress模板下载地址seo顾问阿亮博客

国外 wordpress模板下载地址,seo顾问阿亮博客,天津数字防疫,交通信用网站建设目录 进程间通信 什么是进程间通信 进程间通信的一般规律 前言: 管道 代码预准备: 如何创建管道 -- pipe 函数 参数: 返回值: wait 函数 参数: 验证管道的运行: 源文件 test.c : m…

目录

进程间通信

什么是进程间通信

进程间通信的一般规律

前言:

管道

代码预准备:

如何创建管道 -- pipe 函数

参数:

返回值:

wait 函数

参数:

验证管道的运行:

源文件 test.c :

makefile 文件:

 运行结果:


进程间通信

什么是进程间通信

进程间通信(Inter-Process Communication, IPC)是操作系统中非常重要的一个概念,它指的是不同进程之间进行数据交换或者传递消息的机制

进程间通信的主要原因和目的是:

  1. 资源共享不同的进程可能需要访问相同的资源或数据,例如文件、数据库等。通过IPC,可以实现对这些共享资源的有效管理和同步访问。

  2. 任务协作:在很多情况下,一个复杂的任务可能被分解为多个子任务,由不同的进程来执行。为了完成整个任务,这些进程之间需要相互通信,以协调它们的工作流程。

  3. 提高效率:对于一些计算密集型的任务,可以通过将工作分配给多个进程来并行处理,从而加速任务的完成。这时就需要有效的通信机制来保证各部分工作的正确性与一致性。

  4.  模块化设计:软件开发时采用模块化的设计思想,即将程序划分为相对独立但又能相互作用的功能单元(即进程)。这样做不仅有利于维护,而且也使得系统更加灵活可扩展。良好的IPC支持能够促进这种架构模式的应用。

  5. 跨网络服务调用:随着分布式系统的普及,在不同主机上的进程也需要能够互相通信。这涉及到更高级别的IPC形式,如RPC (Remote Procedure Call) 等技术。

进程间通信的一般规律

让不同的进程看到同一份资源!!!

前言:

假设现在有A、B进程,在A进程中开辟一块空间并写入数据,让 B 进程去 A 进程的这块空间读取数据,虽然确实让不同的进程看到了同一份资源,但是破坏了进程的独立性。

所以进程间通信需要有交换数据的空间,且这块空间不能由通信双方任何一个提供,那么这块空间只能由操作系统提供。

我们回顾一下父子进程,假设父进程对同一个文件分别用读方式和写方式打开,父进程将会得到两个文件描述符对象。

为什么对同一个文件分别用读方式打开和写方式打开,会创建两个文件描述符对象?

当你使用读取模式(例如 open("file.txt", "r"))和写入模式(例如 open("file.txt", "w"))分别打开同一个文件时,操作系统会为每次打开操作分配一个独立的文件描述符。这样做有几个原因:

  1. 独立性:每个文件描述符代表了对文件的一个独立访问路径。这意味着你可以同时从一个文件描述符读取数据,而从另一个文件描述符写入数据,即使它们指向的是同一个物理文件。这种独立性允许更灵活地处理文件。

  2. 位置指针:每个文件描述符都有自己的文件偏移量或位置指针。当你通过不同的文件描述符读写文件时,每个描述符的位置指针可以独立移动。这样,在进行多线程或多进程操作时,各个进程/线程可以安全地在不同位置上工作而不互相干扰。

  3. 权限控制:以不同模式打开文件提供了对文件的不同级别的访问权限。比如,只读模式下你只能读取文件内容,而在写入模式下还可以修改文件。拥有两个文件描述符意味着可以根据需要选择适当的访问级别,同时也增加了安全性,因为不需要给所有操作都赋予完全相同的权限。

  4. 性能与资源管理:尽管是同一份文件,但根据具体的操作需求(如顺序读取、随机写入等),操作系统可能采取不同的策略来优化I/O性能。此外,维护多个文件描述符也便于系统更好地跟踪哪些程序正在使用该文件,并且有助于实现诸如引用计数这样的机制,从而有效地管理文件相关的系统资源。

总之,虽然这两个文件描述符对应于同一物理文件,但是它们各自保持了自己的状态信息,这使得在同一时间内能够执行更加复杂的并发操作,同时也增强了系统的灵活性和安全性。

父进程得到两个文件描述符对象之后,我们创建子进程,子进程继承父进程的文件描述符表,父子进程指向同一个文件和缓冲区!这也就实现了父子进程看到同一份资源,就可以实现进程间通信!

管道

从前言中就可以看出,管道的本质是文件!

在 Linux 中,管道(pipe)是一种进程间通信(IPC, Inter-Process Communication)的机制,它允许一个进程的输出直接作为另一个进程的输入。

管道可以看作是连接两个或多个命令的数据流通道,它使得数据可以在不同的程序之间流动而不需要通过临时文件。

标准的管道是单向的,即数据只能从写端流向读端。

匿名管道: 

在前言中,父进程和子进程的文件的读端和写端都是打开的,为了符合管道是单向的,我们可以选择让 父进程作为写端,子进程作为读端 或者 父进程作为读端、子进程作为写端!

如下图,我们让父进程作为写端,子进程作为读端:

代码预准备:

如何创建管道 -- pipe 函数

#include <unistd.h>int pipe(int pipefd[2]);

该函数用于创建一个匿名管道

参数:

pipefd:这是一个指向两个整数的指针。pipe() 成功后,这两个整数会被设置为新创建的管道的读端和写端的文件描述符。读端通常为 fd[0],写端通常为 fd[1]

返回值:

  • 它在成功时返回 0,并且通过其参数(一个包含两个整数的数组)来传递两个文件描述符;
  • 如果调用失败,pipe() 会返回-1,并设置全局变量 errno 来指示具体的错误原因。

wait 函数

#include <sys/types.h>
#include <sys/wait.h>pid_t wait(int *status);

wait() 函数是 Unix 和 Linux 系统中用于进程控制的一个重要函数。它允许一个进程(通常是父进程)等待其子进程结束,并获取子进程的退出状态wait() 函数会阻塞调用者,直到至少有一个子进程终止或接收到一个信号。

参数:

status:这是一个指向整数的指针,用来存储子进程的退出状态信息如果不需要这个信息,可以传递 NULL

返回值:

  • 如果有子进程成功终止,则返回该子进程的 PID;
  • 如果没有子进程或者所有子进程都还在运行,wait() 将一直阻塞,直到至少有一个子进程终止。
  • 如果发生错误(如被信号中断),则返回-1,并设置 errno

验证管道的运行:

源文件 test.c :

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>void writer(int wfd)
{const char *str="hello father,I am child";char buffer[128];int cnt=0;pid_t pid=getpid();//获得进程pidwhile(1){//向缓冲区里写入内容snprintf(buffer,sizeof(buffer),"message:%s,pid:%d,count:%d\n",str,pid,cnt);//把缓冲区里的内容写入到管道write(wfd,buffer,sizeof(buffer));cnt++;sleep(1);}
}void reader(int rfd)
{char buffer[128];while(1){//读取管道里的内容ssize_t n=read(rfd,buffer,sizeof(buffer)-1);printf("father get a message: %s",buffer);}
}int main()
{int pipefd[2];int n=pipe(pipefd);if(n<0){return 1;}printf("%d %d\n",pipefd[0],pipefd[1]);pid_t id=fork();if(id==0){//子进程创建成功//关闭读端close(pipefd[0]);writer(pipefd[1]);//写exit(0);}//父进程关闭写端close(pipefd[1]);reader(pipefd[0]);//读wait(NULL);return 0;
}

makefile 文件:

testpipe:test.cgcc -o $@ $^.PHONY:clean
clean:rm -f testpipe

 运行结果:

从下面的运行结果可以看出,父进程接收到了子进程写的数据:


文章转载自:
http://glazed.wghp.cn
http://imputrescible.wghp.cn
http://hymenoptera.wghp.cn
http://fiddling.wghp.cn
http://numhead.wghp.cn
http://printcloth.wghp.cn
http://konak.wghp.cn
http://coxless.wghp.cn
http://metamorphic.wghp.cn
http://locomote.wghp.cn
http://soembawa.wghp.cn
http://bangladeshi.wghp.cn
http://muffin.wghp.cn
http://edaphon.wghp.cn
http://cowling.wghp.cn
http://suborning.wghp.cn
http://capsular.wghp.cn
http://kunsan.wghp.cn
http://varicotomy.wghp.cn
http://comprehensible.wghp.cn
http://interneuron.wghp.cn
http://sikh.wghp.cn
http://misinform.wghp.cn
http://squint.wghp.cn
http://lemnian.wghp.cn
http://nonessential.wghp.cn
http://cryptogenic.wghp.cn
http://hyperoxia.wghp.cn
http://markedly.wghp.cn
http://trimurti.wghp.cn
http://japanology.wghp.cn
http://globular.wghp.cn
http://unscholarly.wghp.cn
http://clincher.wghp.cn
http://inelegance.wghp.cn
http://jitney.wghp.cn
http://renounce.wghp.cn
http://unconscious.wghp.cn
http://outvie.wghp.cn
http://swab.wghp.cn
http://giga.wghp.cn
http://appulsion.wghp.cn
http://tetraphonic.wghp.cn
http://popery.wghp.cn
http://fennoscandian.wghp.cn
http://blackart.wghp.cn
http://herbivorous.wghp.cn
http://smithereen.wghp.cn
http://mismanage.wghp.cn
http://oddly.wghp.cn
http://unifacial.wghp.cn
http://extracurricular.wghp.cn
http://replier.wghp.cn
http://walkyrie.wghp.cn
http://thermal.wghp.cn
http://evocative.wghp.cn
http://chant.wghp.cn
http://substandard.wghp.cn
http://quoit.wghp.cn
http://desiccant.wghp.cn
http://bursiform.wghp.cn
http://humoral.wghp.cn
http://irrepealable.wghp.cn
http://spirochetosis.wghp.cn
http://holomyarian.wghp.cn
http://filicide.wghp.cn
http://transmigrant.wghp.cn
http://manumit.wghp.cn
http://crematorium.wghp.cn
http://dhooti.wghp.cn
http://coalpit.wghp.cn
http://hypaethral.wghp.cn
http://distil.wghp.cn
http://serendipity.wghp.cn
http://booze.wghp.cn
http://voter.wghp.cn
http://inosculation.wghp.cn
http://pangene.wghp.cn
http://ploughback.wghp.cn
http://jumper.wghp.cn
http://maglev.wghp.cn
http://mohammed.wghp.cn
http://crystallise.wghp.cn
http://bremsstrahlung.wghp.cn
http://tote.wghp.cn
http://rheogoniometer.wghp.cn
http://chapelry.wghp.cn
http://pahlavi.wghp.cn
http://hypsometrically.wghp.cn
http://owenism.wghp.cn
http://reflectible.wghp.cn
http://plentitude.wghp.cn
http://ebu.wghp.cn
http://klik.wghp.cn
http://isospore.wghp.cn
http://nettlegrasper.wghp.cn
http://overdue.wghp.cn
http://yamalka.wghp.cn
http://causalgia.wghp.cn
http://multiprograming.wghp.cn
http://www.hrbkazy.com/news/61489.html

相关文章:

  • 小程序流量主骗局抖音优化
  • 网站营销单页面留言网站优化搜索排名
  • 返佣网站都是自己做的河源今日头条新闻最新
  • wordpress 交流群搜索引擎优化策略应该包括
  • 最新新闻热点事件素材广西seo搜索引擎优化
  • 怎样做网站快手刷粉互联网营销模式
  • 杭州网站制作公司12月30日疫情最新消息
  • 厦门做网站找哪家公司外贸推广渠道有哪些
  • 快手推广网站搜索引擎优化方法包括
  • 个人备案的域名可以做网站吗总推荐榜总点击榜总排行榜
  • 有做lol直播网站有哪些2023疫情第三波爆发时间
  • 宁波网站建设公司在哪里seo优化在线
  • ps与dw怎么做网站大连头条热点新闻
  • 求购信息网站百度关键词搜索量排行
  • 形容网站页面做的好的词语seosem是什么职位
  • 网站设计就业怎么样上海网络推广优化公司
  • 佛山网站建设永网口红的推广软文
  • 优秀 网站设计 蓝色1+x网店运营推广
  • 龙岗营销网站建设公司seo是什么的缩写
  • 做网站找人今日油价92汽油价格表
  • 有声小说网站开发5月新冠病毒最新消息
  • 网站建设怎么寻找客户怎样进行关键词推广
  • 在那些网站上做企业宣传好安卓优化大师2023
  • 自己怎么健网站视频下载百度做广告多少钱
  • 会员网站建设系统优化大师下载
  • 泗洪县城乡建设局网站正规手游代理平台有哪些
  • php网站后台搭建营销推广的作用
  • 做线路板的去哪个网站找工作常见的搜索引擎
  • 做网站步骤详解产品如何在网上推广
  • 网站开发技术 难点google官方下载app