1
操作系统
实验 9 进程间通信
一、实验目的
通过本实验了解和掌握进程间通信的相关知识
(1)了解进程通信的基本原理。
(2)了解和熟悉管道通信、消息传送机制、共享存储机制和信号机制。
二、实验内容
1) 了解掌握课本上有关进程通信的相关知识点;
2)阅读实验指导书,熟悉实验指导中各种通信实现方式的系统调用以及各参数的具体含义;
3)开始做试验:
1. 进程的管道通信
下面程序实现进程的管道通信。使用系统调用 pipe()建立一条管道线。阅读源程序,完成实验任务。
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
int pid1, pid2; //用于存放 fork 的返回值
main()
{
int fd[2]; //定义管道的两个端口,fd[1]为管道的写入端,fd[0]为读出端
char outpipe[100],inpipe[100];
pipe(fd); //调用 pipe()建立一条管道线
while((pid1=fork())==-1); //循环创建第一个子进程
if(pid1==0) //当前进程是子进程
{
lockf(fd[1],1,0); //申请临界资源(管道写入端)并将其标记为锁定
sprintf(outpipe,"child 1 process is sending a message!");
//把后面“”里的信息写到字符数组 outpipe
write(fd[1],outpipe,50); //将 outpipe 的内容写入管道中
sleep(5); //让进程休眠 5s,才释放资源
lockf(fd[1],0,0); //释放临界资源,以便其他写进程的访问(第二个参数置 0)
exit(0); //正常结束子进程
}
else
{
while((pid2=fork())==-1); //循环创建第二个子进程
if(pid2==0)
{
lockf(fd[1],1,0); /*mutex*/