好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

进程的软中断通信与管道通信.docx

7页
  • 卖家[上传人]:hs****ma
  • 文档编号:485819566
  • 上传时间:2022-07-31
  • 文档格式:DOCX
  • 文档大小:73.53KB
  • / 7 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 实验二 进程的软中断通信与管道通信一、 实验目的:1、进一步认识并发执行的实质;2、分析进程争用资源的现象,学习解决进程互斥的方法;3、了解 Linux 系统中进程通信的基本原理二、 实验内容及要求:1、进程软中断通信:调用 kill 及 signal 函数编写一个程序,父进程生成子进程,父进程发送信号并等待,子进程接收信号并完成某种功能,然后自我终止并唤醒父进程2、进程管道通信:编写一个程序, 建立一个 pipe,同时父进程产生一个子进程,子进程向 pipe 中写入一个字符串,父进程从中读出,并每隔 3 秒输出打印一次三、 实验程序框图:1、软中断通信:建立子进程成功?否 是空操作子进程父进程输出 pid 值接收信号执行 cool 函数功能输出 pid 值发出信号等待 cool执行完毕自我终止唤醒父进程结束等待继续执行以下指令2、管道通信(即: cool 函数功能):建立子进程成功?否 是空操作子进程 父进程写入字符串 等待 自我终止唤醒父进结束等待读出字符串程序中打印 4 次每隔 3 秒输出打印一次该字符串四、实验程序:#include#include#includevoid cool( ); --函数申明main( ){ int jincheng;while((jincheng=fork()) ==-1); --建立子进程,不成功则空循环if(jincheng==0)--建立子进程成功{ printf("\n the child's pid is %d\n",getpid( ));--输出打印子进程 id值signal(17,cool);--接收父进程发来的信号sleep(5);--等待 5秒exit(0);--自我终止}else{printf( "\n the parent's pid is %d\n",getpid( ));--输出打印父进程 id值sleep(1);--等待 1秒--通知子进程printf("\n child,I have sent a signal.\n");kill(jincheng,17);--发送信号给子进程wait(0);--等待子进程结束}}void cool( ){ int guandao[2],pid,i;char output[70],input[70];printf( "\n yes,father!I have recieved the signal.\n"); --子进程收到信号pipe(guandao);--建立管道while((pid=fork()) ==-1);--建立子进程,不成功则空循环if(pid==0)--建立子进程成功{ sprintf(output,"\n father,I am sending message!\n"); --写字符串write(guandao[1],output,40);--向写管道里写字符串exit(0);--自我终止}else--等待子进程结束{ wait(0);read(guandao[0],input,40);--从读管道里读字符串for(i=0;i<4;i++)--打印四次{printf( "\n %s" ,input);--输出打印字符串sleep(3);--等待 3秒}--进程终止exit(0);}}五、 实验运行结果:六、实验心得:通过这次实验,让我了解了 Linux 中编译器的使用,对 Linux 进程的管理有了进一步的认识, 学会了一些函数的应用。

      但是这只是其中的很小的一部分, 要更深入的了解 Linux ,还需多多学习,多多查阅资料。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.