当前位置:
文档之家› 操作系统 进程的管道通信 实验报告
操作系统 进程的管道通信 实验报告
实验内容与步骤:
编写程序实现进程的管道通信。用系统调用pipe( )建立一管道,二个子进程P1和P2分别向管道各写一句话:
Child P1 is sending a message!
Child P2 is sending a message!
父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。
延迟5秒后显示
child 1 process is sending message!
再延迟5秒
child 2 process is sending message!
并实现循环5次读写
程序如下:
#include <stdio.h>
int pid1, pid2, i=0;
int main( )
{
int fd[2];
}
else
{
printf("\nFather1\n");
int p;
for(p=0;p<5;p++)
{
read(fd[0], InPipe, 50);
printf("%s\n", InPipe);
}
printf("\nFather2\n");
int q;
for(q=0;q<5;q++)
{
read(fd[0], InPipe, 50);
write(fd[1], OutPipe, 50);
sleep(5);
}
lockf(fd[1], 0, 0);
exit(0);
}
else
{
while((pid2 = fork()) == -1);
if(pid2 == 0)
{
printf("\nChild2\n");
lockf(fd[1], 1, 0);
printf("%s\n", InPipe);
}
exit(0);
}
}
return 0;
}
运行结果如下:
分析与体会:
1、通过本实验,我了解到所谓管道,是指能够连接一个写进程和一个读进程、并允许它们以生产者—消费者方式进行通信的一个共享文件,又称为pipe文件。由写进程从管道的写入端(句柄1)将数据写入管道,而读进程则从管道的读出端(句柄0)读出数据。并知道pipe文件的建立。
2、熟悉UNIX/LINUX支持的管道通信方式,并在程序中运用了pipe(),read()和write()等系统调用。
3、验证了lockf的加锁解锁作用,并验证了读写进程互斥。
4、进程中sleep(5)的作用是让所显示的内容休眠5秒钟,即等待5秒钟再显示。进程1和进程2也能对管道进行操作,因为他们同属于共同的管道,共同共享资源。
char OutPipe[100],InPipe[100];
pipe(fd);
while((pid1 = fork()) == -1);
if(pid1 == 0)
{
printf("\nChild1\n");
lockf(fd[1], 1, 0);
int i;
for(i=0;i<5;i++)
{
sprintf(OutPipe, "\n Child process %d is sending message!\n",i);
进程的管道通信实验报告
学号
姓名
时间
2011年11月18日
专业
网络工程
班级
5班
实验题目:进程的管道通信实验
实验目的:
1、了解什么是管道
2、熟悉UNIX/LINUX支持的管道通信方式
3、通过进程多次的循环读写学习利用管道进行进程间的通信
4、验证lockf的加锁解锁作用
5、验证读写进程本身是否已经实现了互斥作用
int j;
for(j=0;j<5;j++)
{
sprintf(OutPipe, "\n Child process %d is sending message!\n",j);
write(fd[1], OutPipe, 50);
sleep(5);
}loLeabharlann kf(fd[1], 0, 0);exit(0);