预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

大学实验报告 学院:计信学院专业:网络工程092班级: 姓名学号实验组实验时间2011-11-24指导教师成绩实验项目名称实验四进程的管道通信实验实验目的1、了解什么是管道 2、熟悉UNIX/LINUX支持的管道通信方式 实验要求1、了解什么是管道 2、熟悉UNIX/LINUX支持的管道通信方式 实验原理利用linux下的vi编辑器及GCC编辑工具完成实验实验仪器PC机器linux操作系统实验步骤编写程序实现进程的管道通信。用系统调用pipe()建立一管道,二个子进程P1和P2分别向管道各写一句话: Child1issendingamessage! Child2issendingamessage! 父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。 实验内容程序部分: #include<unistd.h> #include<signal.h> #include<stdio.h> intpid1,pid2; main() { intfd[2]; charoutpipe[100],inpipe[100]; pipe(fd);/*创建一个管道*/ while((pid1=fork())==-1); if(pid1==0) { lockf(fd[1],1,0); sprintf(outpipe,"child1processissendingmessage!"); /*把串放入数组outpipe中*/ write(fd[1],outpipe,50);/*向管道写长为50字节的串*/ sleep(5);/*自我阻塞5秒*/ lockf(fd[1],0,0); exit(0); } else { while((pid2=fork())==-1); if(pid2==0) {lockf(fd[1],1,0);/*互斥*/ sprintf(outpipe,"child2processissendingmessage!"); write(fd[1],outpipe,50); sleep(5); lockf(fd[1],0,0); exit(0); } else {wait(0);/*同步*/ read(fd[0],inpipe,50);/*从管道中读长为50字节的串*/ printf("%s\n",inpipe); wait(0); read(fd[0],inpipe,50); printf("%s\n",inpipe); exit(0); } } } 实验数据 实验总结程序中的sleep(5)起什么作用? 自我阻塞5秒。 2、子进程1和2为什么也能对管道进行操作? 因为父进程用pipe()创建了一个无名管道,子进程1和2都知道该管道文件描述符,所以进程1和2都能对管道进行操作指导教师意见 签名:年月日注:各学院可根据教学需要对以上栏木进行增减。表格内容可根据内容扩充。