基于管道的进程通信实验.docVIP

  • 111
  • 0
  • 约1.45千字
  • 约 5页
  • 2019-10-09 发布于广东
  • 举报
实现工具 PC机一台,Putty软件 实现环境 Linux系统环境 实习内容(功能、目标) 功能:编写一段程序,使用系统调用pipe()创建一无名管道,同时父进程创建一个子进程p1;并使子进程通过管道向父进程传递数据“p1 process is sending data to father.”,父进程通过管道接收到该字符串后输出。 目标:(1)掌握系统调用pipe()的使用方法及其功能,理解管道通信原理;    (2)掌握利用系统调用exit()和wait()实现父进程与子进程之间的同步,理解同步的含义。 ( 3 )创建无名管道,实现基于管道的进程间数据通信, 掌握管道通信的方法及特征;并进一步理解互斥与 同步的含义 实现的思想、方法和技术(含数据结构、算法) 本次实验通过系统调用用C语言实现了父进程创建一个子进程p1;并使子进程通过管道向父进程传递数据“p1 process is sending data to father.”,父进程通过管道接收到该字符串后输出。没有应用复杂的算法,只运用简单的数据结构fd数组。While循环保证了进程创建的成功。利用系统调用exit()和wait()实现父进程与子进程之间的同步,理解了同步的含义。 需要注意的是要在父进程与子进程之间通过管道同步传递数据,如果不同步而任意写入或读取数据结果会导致读出未更新数据即产生“读后写”问题。还应注意各子进程间利用lockf()加锁互斥向管道写入数据。 主要代码 注释 #include stdio.h #include sys/types.h #include unistd.h int main() { int x,fd[2]; char buf[50],s[50]; pipe(fd); while((x=fork())==-1); if(x==0) { lockf(fd[1],1,0); sprintf(buf,p1 process is sending data to father!\n); write(fd[1],buf,50); lockf(fd[1],0,0); } else { read(fd[0],s,50); printf(%s,s); } } 系统函数头文件 系统函数头文件 fork函数头文件 创建管道fd 创建进程 创建子进程成功 将管道一端 fd[1]锁定 向缓冲区写入内容 向管道中写入数据 将管道一端 fd[1]解锁 退出 从管道中读出数据 打印输出 结果分析(含实现中出错原因分析) 在本实验中,主要目的是通过建立管道两个进程之间相互传递数据并进输出,需要注意的是在向管道中写数据或是读数据时要防止其他进程的干扰,所以在本实验中增加了加锁机制,有效地杜绝了这一问题。 指导教师评语、评分 评分: 指导教师: 年 月 日

文档评论(0)

1亿VIP精品文档

相关文档