实 验 报 告 ( 2013 / 2014 学年 第 1 学期)课程名称 操作系统原理 实验名称 实验2 :进程间通信 实验时间 2 0 1 3 年 1 0 月 1 0 日 指导单位 软件工程系 指导教师 杨 健 学生姓名 班级学号 学院(系) 软件工程系 专 业 计算机软件与服务外包 1 实验名称 实验2:进程间通信 指导教师 杨健 实验类型 验证 实验学时 2 实验时间 一、 实验目的 1.了解 Linux 中的信号,熟悉 Linux 系统中进程之间软中断通信的基本原理。 2.Linux 系统的进程通信机构(IPC)允许在任意进程间大批量地交换数据,学习如何利用消息缓冲队列进行进程间的通信,并加深对消息通信机制的理解。 二、实验环境(实验设备) Windows 2000 + VMWare + RedHat Linux 8 三、实验内容 1.编写程序:用 fork()创建两个子进程,再用系统调用 signal()让父进程捕捉键盘上来的中断信号(即按^c 键);捕捉到中断信号后,父进程用系统调用 kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息,然后终止: Child process1 is killed by parent! Child process2 is killed by parent! 父进程等待两个子进程终止后,输出如下的信息后终止: Parent process is killed! 2.分析利用软中断通信实现进程同步的机制。 3.消息的创建,发送和接收。 4.使用系统调用 msgget(),msgsnd(),msgrev(),及 msgctl()编制消息的发送和接收程序。 5.server.c 程序后台运行,client.c 程序前台运行,server.c 先于 client.c 运行。 程序代码 #include #include #include void waiting( ),stop( ); int wait_mark; main( ) { int p1,p2,stdout; while((p1=fork( ))= =-1); /*创建子进程p1*/ if (p1>0) { while((p2=fork( ))= =-1); /*创建子进程p2*/ if(p2>0) { wait_mark=1; signal(SIGINT,stop); /*接收到^c 信号,转 stop*/ waiting( ); 2 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 pare...