linux多进程和进程间通信.docx

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

实验六 linux多进程与进程间通信实验目的熟悉linux系统编程方法熟悉linux常用的系统调用实验环境PC机一台安装虚拟机版的linux操作系统一台实验预习熟悉进程创建/线程创建系统调用熟悉进程间通信系统的调用实验内容Linux fork调用进程间通信系统调用:管道通信实验步骤编写一个程序,实现如下功能:创建两个子进程,父进程向管道中按照顺序输入数字1 2 3 4 5 6……,另外两个子进程分别从管道中按照顺序读出奇数和偶数,及子进程1读出的数据应该是1 3 5 7 9……,而子进程读出的数据应该是2 4 6 8 10 ……数据,要求按先读奇数,再读偶数的顺序进行程序代码如下:#includeunistd.h#includesignal.h#includestdio.h#includestdlib.hint pid1,pid2;main( ){ int fd[2],i=0,j=0;char outpipe[100],inpipe1[100],inpipe2[100],outpipe1[100];pipe(fd); /*创建一个管道*/while ((pid1=fork( ))==-1);/*向管道中写入字符123456789*/lockf(fd[1],1,0);sprintf(outpipe,123456789);write(fd[1],outpipe,50);lockf(fd[1],0,0);/*----------------------------------*//*子进程1先读取管道中所有的字符,再重新把不需要的字符写入管道*/if(pid1==0) {lockf(fd[0],1,0);read(fd[0],inpipe1,10);for(i=0;i10;i++)//把不需要的字符写入管道{ if(i%2){outpipe1[j]=inpipe1[i];j++;}}lockf(fd[1],1,0);write(fd[1],outpipe1,5);lockf(fd[1],0,0);//写入结束sleep(5); /*自我阻塞5秒*/ lockf(fd[0],0,0); exit(0); }/*--------------------------------------------------*/else {/*子进程2从管道中读取字符*/while((pid2=fork( ))==-1); if(pid2==0){{ lockf(fd[0],1,0); /*互斥*/ read(fd[0],inpipe2,5); lockf(fd[0],0,0); }sleep(5);lockf(fd[0],0,0);exit(0);}/*读取结束*/ else { wait(0); /*同步*/ read(fd[0],inpipe2,10); /*从管道中读长为50字节的串*/ printf(inpipe2 %s\n,inpipe2); wait(0); read(fd[0],inpipe1,10); printf(inpipe1 %s\n,inpipe1); exit(0); } }}实验结果如下:实验思考(1)、多进程与多线程相比,各自的优点和缺点是什么?多进程多线程优点内存隔离,单个进程的异常不会导致整个应用的崩溃。方便调试。提高系统的并行性,并且开销小。缺点进程间调用,通讯和切换开销均比多线程大。没有内存隔离,单个线程的崩溃会导致整个应用过的退出,有错误使不易定位。(2)、多线程的性能是否一定比多进程的性能好?如果不是,请举例说明。不一定,在目标子动能交互少的情况下,用多进程更好。

文档评论(0)

wyjy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档