- 1、本文档共60页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 操作系统设计课程-第二部分UnixLinux系统编程-教学课件(非AI生成).pptx
- 高级电工作业模拟考试题(有答案).pdf
- 2019年二级造价工程师《建设工程计量与计价实务(土木建筑工程)》真题(含解析).pdf
- 2017年一建《建筑工程管理与实务》真题(含答案).pdf
- 2019年注安《化工安全》真题(含解析).pdf
- 2017年消防师《消防安全案例分析》考试真题(含解析).pdf
- 2020年一造《建设工程技术与计量(土建)》真题(含答案).pdf
- 2022年安全员C证江西省考试试题(有答案).pdf
- 高考语文复习情景式默写总编练习(必修全册和选择性必修全册).pdf
- 初中政治必背知识点汇编.pdf
最近下载
- 电大一网一《EXCEL在财务中的应用》形考作业二.docx VIP
- 六年级上册第三单元习作《 让生活更美好》作文评语.doc
- 产后骨盆修复培训课件.pptx VIP
- 严重精神障碍核查表.docx VIP
- 污水处理厂突发环境事件应急预案.doc
- 双减背景下新课标单元整体作业分层设计案例 人教部编版初中历史八年级上册 中国开始沦为半殖民地半封建社会.docx
- 机器视觉工程师课程(初级对外).pptx VIP
- AQT 3034-2022 化工过程安全管理导则.pdf
- SH-T 3528-2005石油化工钢储罐地基与基础施工及验收规范.pdf VIP
- 八宝粥原料处理工艺流程图及流程说明.doc VIP
文档评论(0)