手机版

计算机操作系统实验二 进程间通信

时间:2025-04-21   来源:未知    
字号:

南京信息工程大学 实验(实习)报告 实验(实习)名称 进程间通信 实验(实习)日期 20131130 得分 指导教师 系 计算机系 专业 计科 年级 2011 班次 1 姓名 汤建洋 学号 20112308018

1. 实验目的

Linux系统的进程通信机构(IPC)允许在任意进程间大批量地交换数据。本实验的目的是了解和熟悉Linux支持的消息通信机制、共享存储区和管道通信机制。

2. 实验准备

阅读Linux系统的msg.c、sem.c和shm.c等源码文件,熟悉Linux的三种通信机制。

3. 实验内容

⑴ 消息的创建、发送和接收。要求使用系统调用msgget ( ),msgsnd ( ),msgrev ( )及msgctl ( )编制长度为1K的消息的发送和接收程序,运行程序并观察结果,说明控制消息队列系统调用msgctl ( )在此起什么作用。

⑵ 共享存储区的创建、附接和断接。要求使用系统调用shmget ( ),shmat ( ),sgmdt ( ),shmctl ( ),编制一个与上述功能相同的程序。

⑶ 进程的管道通信。使用系统调用pipe ( )建立一条管道线,两个子进程P1和P2分别向管道各写一句话:

Child 1 is sending a message!

Child 2 is sending a message!

而父进程则从管道中读出来自于两个子进程的信息并显示在屏幕上,要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。

4. 实验指导

⑴ 消息的创建、发送和接收。

<程序设计>

为了便于操作和观察结果,用一个程序作为“引子”,先后fork ( )两个子进程SERVER和CLIENT进行通信,

SERVER端建立一个KEY为75的消息队列,等待其他进程发来的消息。当遇到类型为1的消息时,则作为结束信号,取消该队列并退出SERVER。SERVER每接收到一个消息后显示一句“( server) received”。

CLIENT端使用KEY为75的消息队列,先后发送类型从10到1的消息后退出。最后的一个消息即是SERVER端需要的结束信号。CLIENT每发送一条消息后显示一句“(client)sent”。

父进程在SERVER和CLIENT均退出后结束。

进程的管道通信。

<程序>

# include <unistd.h>

# include <stdio.h>

# include <signal.h>

int pid1, pid2;

main ( )

{ int fd [3];

char OutPipe [100], Inpipe [100];

pipe (fd);

while (pid1=fork ( ))= = -1);

if (pid1 = =0)

{

printf (“p1\n”);

lockf (fd[1], 1,0 );

sprintf ( OutPipe, “child 1 process is sending a message!”); write (fd [1], OutPipe, 50);

sleep (1);

lockf (fd [1], 0,0);

exit (0);

}

else

{

while (pid2=fork ( ))= = -1);

if (pid2 = =0)

{

printf (“p2\n”);

lockf (fd[1], 1,0 );

sprintf ( OutPipe, “child 2 process is sending a message!”); write (fd [1], OutPipe, 50);

sleep (1);

lockf (fd [1], 0,0);

exit (0);

}

}

else

{

printf (“parent \n”);

wait (0);

read (fd [0], InPipe, 50);

printf (“%s\n”, InPipe);

wait (0);

read (fd [0], InPipe, 50);

printf (“%s\n”, InPipe);

exit (0);

}

}

}

<运行结果>

tjy@ubuntu:~$ ./process5.o

p1

parent

p2

child 1 process is sending a message! child 2 process is sending a message!

计算机操作系统实验二 进程间通信.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)