实验三、进程通信(一)----------——管道及共享内存.docVIP

实验三、进程通信(一)----------——管道及共享内存.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验三、进程通信(一)----------——管道及共享内存 实验三、进程通信(一)----------——管道及共享内存 运行结果: 分析: 调用pipe(fd);创建一个管道后,接着调用fork()函数产生两个进程,首先开始执行子进程,关闭管道出口,通过管道入口向管道中写入内容。执行if语句后,进入else语句块内开始父进程,管道入口关闭,通过管道出口端从管道中读取之前写入内容,最后输出出来 编写程序:父进程利用管道将一字符串交给子进程处理。子进程读字符串,将里面的字符反向后再交给父进程,父进程最后读取并打印反向的字符串。 实验代码: #includestdio.h main() { int x,count,left,right,temp,fd[2],fe[2]; char c,buf[30],s[30]; pipe(fd); pipe(fe); printf(please input a line of char); scanf(%s,buf); while((x=fork())==-1); if(x==0) { close(fd[0]); close(fe[1]); printf(Child Process!\n); write(fd[1],buf,30); read(fe[0],buf,30); printf(%s\n,buf); exit(0); } else{ close(fd[1]); close(fe[0]); count=0; do {read(fd[0],c,1); s[count++]=c; }while(c!=\0); printf(Parent Process!\n); printf(%s\n,s); count-=2; for(left=0,right=count;left=count/2;left++,right--){ temp=s[left]; s[left]=s[right]; s[right]=temp; } write(fe[1],s,30); wait(0); } 运行结果: 阅读例2的程序,运行一次该程序,然后用ipcs命令查看系统中共享存储区的情况,再次执行该程序,再用ipcs命令查看系统中共享内存的情况,对两次的结果进行比较,并分析原因。最后用ipcrm命令删除自己建立的共享存储区。 (有关ipcs和ipcrm介绍见后面一页) 实验代码: #include sys/types.h #include sys/ipc.h #include sys/shm.h main() { key_t key=208; /*在实际实验过程中,为了避免每个同学建立的共享存储区关键字一样而相互干扰,关键字请用学号末3位*/ int shmid_1,shmid_2; if ((shmid_1=shmget(key,1000,0644|IPC_CREAT))==-1){ perror(shmget shmid_1);exit(1); } printf(First shared memory identifier is %d\n,shmid_1); if ((shmid_2=shmget(IPC_PRIVATE,20,0644))==-1){ perror(shmget shmid_2);exit(2); } printf(Second shared memory identifier is %d\n,shmid_2); exit(0); } 运行结果: Ipcs查看: 再次运行: 再次用ipcs查看: Ipcrm删除 分析: 成功,返回共享内存段的标识符,内核中用于唯一的标识一个对象。对存在于内核存贮空间中的每个共享内存段,内核均为其维护着一个数据结构shmid_ds。 失败,返回-1,设置errno。 ①第一个参数key(键值)用来创建IPC标识符,shmget()返回的标识符与key值一一对应,不同的key值返回不同的标识符。 ②第二个参数size,决定了共享内存段的大小(若访问已存在的内存段,该参数可设为0)。有最大字节数的限制 ③第三个参数shmflag,用于设置访问权限及标识创建条件。 对两次的结果进行比较:两次运行结束后的 第二个共享标识符是不一样的。在用ipcs查看时,共享内存段中的关键字,共享内存标识符,访问权限,字节等都是不一样的。 (4)每个同学登陆两个窗口,先在一个窗口中运行例3程序1(或者只登陆一个窗口,先在该窗口

文档评论(0)

183****9588 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档