进程间通信实验汇编

上传人:我** 文档编号:113811361 上传时间:2019-11-09 格式:DOC 页数:12 大小:814.50KB
返回 下载 相关 举报
进程间通信实验汇编_第1页
第1页 / 共12页
进程间通信实验汇编_第2页
第2页 / 共12页
进程间通信实验汇编_第3页
第3页 / 共12页
进程间通信实验汇编_第4页
第4页 / 共12页
进程间通信实验汇编_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《进程间通信实验汇编》由会员分享,可在线阅读,更多相关《进程间通信实验汇编(12页珍藏版)》请在金锄头文库上搜索。

1、进程间通信(1)调试以下程序给出运行结果并分析其程序原理:#include #include #include #include #include #include #include #include (1)编写两个程实现进程的无名管道和有名管道通信。要求分别调用pipe()、close()、write()、read()、popen()、pclose()、mknod()、mkfifo()、open()实现多个进程间的通信。1.使用无名管道pipe(),进行父子进程之间的通信。编写的程序如下:fork函数执行完毕后,返回值pid0,则运行父进程,关闭读操作,进行写操作,将信息写进管道,写完后关闭

2、写操作,父进程挂起。Pid=0,运行子程序,关闭写操作,进行读操作,读完信息关闭读操作,子进程运行结束,父进程继续运行。2.以命名行为参数的管道文件的示例。(假设有一个可执行程序chcase,从标准输入设备读字符,将小写字母转化成大写字母并输出。主程序使用popen创建管道,实现蒋某文本文件中的字幕转化成大写字母,其中的文本文件名作为参数传进来。)命令行数量不为2时,输出结果如图所示;创建一个可执行程序chcase,此程序从标准输入设备读字符,将小写字母转化成大写字母并输出。主程序使用popen()创建一个管道。再创建一个文本文件,输入将要转换成大写字母的小写字母。Popen创建的管道一头与文

3、本文件相连,获取文本文件中的信息,将此信息通过管道传送给与管道另一端相连的可执行程序chcase,chcase获取文本文件中的小写字母后,将小写字母转换成大写字母输出。3. 创建有名管道。当输入命令行数量为2时,打开管道,只进行写操作。不为2时,打开管道,只进行读操作。且均循环26次。4.软中断机制#include#include#include void waiting(),stop(),alarming();int wait_mark;main()int p1,p2;if(p1=fork() if(p2=fork()wait_mark=1;signal(SIGINT,stop); sign

4、al(SIGALRM,alarming);waiting();kill(p1,16); kill(p2,17); wait(0); wait(0);printf(parent process is killed!n);exit(0); else wait_mark=1;signal(17,stop);signal(SIGINT,SIG_IGN); while (wait_mark!=0);lockf(1,1,0);printf(child process2 is killed by parent!n);lockf(1,0,0);exit(0);elsewait_mark=1;signal(16

5、,stop);signal(SIGINT,SIG_IGN); while (wait_mark!=0)lockf(1,1,0);printf(child process1 is killed by parent!n);lockf(1,0,0);exit(0);void waiting()sleep(5);if (wait_mark!=0) kill(getpid(),SIGALRM);void alarming()wait_mark=0;void stop()wait_mark=0;程序调用fork()函数创建两个子进程,开始两个子进程处于等待状态。singal()函数让父进程获取中断信号C;

6、当父进程获取该中断信号后,父进程调用Kill()函数向两个子进程发出信号,该信号的作用是让子进程从等待状态转为执行状态,子进程捕捉到该信号后分别执行各自的程序。两个子进程执行完成后,父进程收到相应信号后,执行程序。5.信号程序实例与修正#include #include #include void waiting( ),stop( );int wait_mark;main( )int p1,p2,stdout;while(p1=fork( )=-1); /*创建子进程p1*/if (p10) while(p2=fork( )=-1); /*创建子进程p2*/if(p20) wait_mark=

7、1;signal(SIGINT,stop); /*接收到c信号,转stop*/waiting( );kill(p1,16); /*向p1发软中断信号16*/kill(p2,17); /*向p2发软中断信号17*/wait(0); /*同步*/wait(0);printf(Parent process is killed!n);exit(0); else wait_mark=1;signal(17,stop); /*接收到软中断信号17,转stop*/waiting( );lockf(stdout,1,0);printf(Child process 2 is killed by parent!n

8、);lockf(stdout,0,0);exit(0);elsewait_mark=1;signal(16,stop); /*接收到软中断信号16,转stop*/waiting( );lockf(stdout,1,0);printf(Child process 1 is killed by parent!n);lockf(stdout,0,0);exit(0); void waiting( ) while(wait_mark!=0);void stop( )wait_mark=0;运行结果屏幕上无反应,按下C后,显示 Parent process is killed!分析原因在while语句里

9、,那么当创建失败之后,如果在while里面没有break或者跳出,当while执行体执行结束后又会执行(p1=fork()=-1,等于不断重复创建子进程一直到创建成功为止没有成功调用两个子进程P1,P2。当signal()让父进程获取从C信号,只有捕捉到信号后,父进程用系统调用kill()向两个子进程发出信号。当子进程捕捉到信号后才能输出信息,之后父进程输出信息。思考1、 该程序段前面部分用了两个wait(0),它们起什么作用? 答:使子进程P1和P2同时发出软中断信号。2、该程序段中每个进程退出时都用了语句exit(0),为什么?3、为何预期的结果并未显示出?答:没有成功调用两个子进程P1,

10、P2。当signal()让父进程获取从C信号,只有捕捉到信号后,父进程用系统调用kill()向两个子进程发出信号。当子进程捕捉到信号后才能输出信息,之后父进程输出信息。4、(重点)程序该如何修改才能得到正确结果?(实验报告中写出完整程序)#include #include #include void waiting( ),stop( );int wait_mark;main( )int p1,p2,stdout;while(p1=fork( )= =-1); /*创建子进程p1*/if (p10) while(p2=fork( )= =-1); /*创建子进程p2*/if(p20) wait_

11、mark=1;signal(SIGINT,stop); /*接收到c信号,转stop*/waiting( );kill(p1,16); /*向p1发软中断信号16*/kill(p2,17); /*向p2发软中断信号17*/wait(0); /*同步*/wait(0);printf(Parent process is killed!n);exit(0); else wait_mark=1;signal(17,stop); /*接收到软中断信号17,转stop*/signal(SIGALRM,alarming);waiting( );lockf(stdout,1,0);printf(Child p

12、rocess 2 is killed by parent!n);lockf(stdout,0,0);exit(0);elsewait_mark=1;signal(16,stop); /*接收到软中断信号16,转stop*/waiting( );lockf(stdout,1,0);printf(Child process 1 is killed by parent!n);lockf(stdout,0,0);exit(0); void waiting( ) sleep(5); if(wait_mark!=0); kill(getpid(),SIGALRM); void stop( )wait_mark=0; void alarming() wait_mark=0;5、*不修改程序如何得到期望的输出?不做任何操作等待五秒钟父进程会在子进程先退出后退出,并打印退出顺序

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号