操作系统实验四进程的管道通信实验.docVIP

  • 439
  • 0
  • 约1.62千字
  • 约 4页
  • 2017-08-19 发布于北京
  • 举报

操作系统实验四进程的管道通信实验.doc

大学实验报告 学院:计信学院 专业: 网络工程092 班级: 姓名 学号 实验组 实验时间 2011-11-24 指导教师 成绩 实验项目名称 实验四 进程的管道通信实验 实验目的 1、了解什么是管道 2、熟悉UNIX/LINUX支持的管道通信方式 实验要求 1、了解什么是管道 2、熟悉UNIX/LINUX支持的管道通信方式 实验原理 利用linux下的vi编辑器及GCC编辑工具完成实验 实验仪器 PC机器linux操作系统 实验步骤 编写程序实现进程的管道通信。用系统调用pipe( )建立一管道,二个子进程P1和P2分别向管道各写一句话: Child 1 is sending a message! Child 2 is sending a message! 父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。 实验内容 程序部分: #include unistd.h #include signal.h #include stdio.h int pid1,pid2; main( ) { int fd[2]; char outpipe[100],inpipe[100]; pipe(fd); /*创建一个管道*/ while ((pid1=fork( ))==-1); if(pid1= =0) { lockf(fd[1],1,0); sprintf(outpipe,child 1 process is sending message!); /*把串放入数组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,child 2 process is sending message!); 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都能对管道进行操作

文档评论(0)

1亿VIP精品文档

相关文档