操作系统课程设计-第三部分UnixLinux系统进程通信-教学课件(非AI生成).pptx

操作系统课程设计-第三部分UnixLinux系统进程通信-教学课件(非AI生成).pptx

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

操作系统实验课程

提纲进程控制调用实验二、实验三文件系统调用实验五系统进程通信实验三

第三部分

Unix/Linux系统进程通信

进程通信IPC:InterProcessCommunicationLinux支持的进程通信方式:管道通信无名管道命名管道信号共享内存区信号量机制消息缓冲(队列)早期UNIXIPC方式SystemVIPC方式,也称XSIIPC

管道通信无名管道无名管道只可用于父子进程或者兄弟进程之间调用格式无名管道使用临时文件的方式实现进程之间的通信,建立的管道文件只存在于内存中,无法在文件系统中看到fdes中返回两个文件描述符fdes[0]和fdes[1]。fdes[0]以只读方式打开,为读取端fdes[1]以只写方式打开,为写入端数据在管道中只能单向流动,即同一进程不可既对fdes[0]读取,又对fdes[1]进行写入#includeunistd.hintpipe(intfdes[2]);

管道通信无名管道当读一个写入端已被关闭的管道时,在所有数据都被读取后,read返回0,指示结束当写一个读取端已被关闭的管道时,则产生信号SIGPIPE指示管道破裂,默认动作为结束进程,如果忽略或者捕捉该信号后返回,write返回-1在创建管道后关闭不需要的文件描述符,避免错误操作从子进程通向父进程的管道示意图

管道通信无名管道程序例intmain(){pid_tpid;intfdes[2];charstr[50]=“pipemessage”,buf[50];pipe(fdes);pid=fork();if(pid0){close(fdes[1]);wait(0);memset(buf,‘\0’,sizeof(buf));read(fdes[0],buf,50);printf(“parentreceive:%s\n”,buf);}else{close(fdes[0]);write(fdes[1],str,strlen(str));printf(“childsend:%s\n”,str);}}创建管道父进程关闭写入端等待子进程结束读取管道内容子进程关闭读取端向管道写入内容

管道通信无名管道运行结果

管道通信无名管道当父进程与子进程处于相同程序时,共享管道文件描述符但当子进程通过exec调用,启动了一个新的可执行文件时,子进程需要知道应该访问哪一个文件描述符解决办法:将管道文件描述符传递给用exec启动的可执行文件

管道通信无名管道程序例intmain(){pid_tpid;intfdes[2];charbuf[50],param[50];pipe(fdes);pid=fork();if(pid0){close(fdes[1]);sleep(1);memset(buf,‘\0’,sizeof(buf));read(fdes[0],buf,50);printf(“parentreceive:%s\n”,buf);}else{sprintf(param,“%d”,fdes[1]);execl(“/root/test/other”,“other”,param,0);}}intmain(intargc,char*argv[]){charstr[50]=“pipemessage”;intfiledes;sscanf(argv[1],“%d”,filedes);write(filedes,str,strlen(str));printf(“othersend:%s\n”,str);}将写入端打印为字符串参数执行外部程序外部程序

管道通信复制文件描述符调用格式指使用另外一个文件描述符指向同一个打开的文件,即创建一个与给定描述符等价的新描述符,不同于文件描述符变量自身的复制若成功,则返回新的文件描述符dup()函数由系统自动分配当前可用的最小文件描述符dup2()函数可由第二个参数指定新描述符的数值,如果该描述符已被打开,则将其先关闭#includeunistd.hintdup(intfiledes);intdup2(intfiledes,intfiledes2);指定文件描述符

管道通信复制文件描述符程序例intfd,fd2;char

文档评论(0)

188****7976 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档