第四次实验 进程的管道及消息通信.docVIP

  • 15
  • 0
  • 约1.32万字
  • 约 17页
  • 2017-10-03 发布于重庆
  • 举报
第四次实验 进程的管道及消息通信

甘肃政法学院 本科生实验报告 (四) 姓名:杨万 学院:计算机科学 专业:计算机科学与技术 班级:2009级计本 实验课程名称:操作系统实验 实验日期:2012年6月8 日 指导教师及职称:何珍祥 实验成绩: 开课时间:2011-2012学年 第二学期 甘肃政法学院实验管理中心印制 实验题目 ?进程的管道及消息通信 否 姓名 杨万 班级 2009级计本 学 号 200981010142 一、实验目的 熟悉UNIX和linux操作系统进程通信的系统调用。 理解和掌握UNIX和LINUX进程通信系统的调用的功能,给出了进程通讯实现机制中的使用的系统调用命令的格式和如何利用系统调用命令进行进程通信编程,通过学习,提高对进程之间可通过系统的编程能力。 二.实验环境 操作系统Windows XP 2.装有虚拟机Linux的系统 三、实验内容与步骤 一.管道通信机制 通过使用管道实现两个或多个进程之间的通信。所谓管道,就是能将一个进程的标准输出与另一个进程的标准输入联系在一起,进行通信的一种方法。同组进程之间可用无名管道任意通信,而不同组进程之间可通过有名管道进行通信。 无名管道的通信 创建无名管道的格式 #includesys/types.h #includectype.h #includeunistd.h int pipe(int filedes[2]); 真确返回:0,错误返回:-1。无名管道pipe()的使用 例子:使用无名管道pipe(),进行父子进程之间的通信。源代码如下: #includesys/types.h #includectype.h #includeunistd.h int pipe(int filedes[2]); char parent[]=A message to pipecommunication.\n; main() { int pid,chan1[2]; char buf[100]; pipe(chan1); pid=fork(); if(pid0) { printf(to create child error\n); exit(1); } if(pid0) { close(chan1[0]); printf(parent process sends a message to child.\n); write(chan1[1],parent,sizeof(parent)); close(chan1[1]); printf(parent process waits the child to terminate\n); wait(0); printf(parent process terminate\n); } else { close(chan1[1]); read(chan1[0],buf,100); printf(The message read by child process from parent is :%s.\n,buf); close(chan1[0]); printf(child process terminates\n); } } 以命令行为参数的管道通信 (1)命令格式 #includestdio.h #includesys/types.h #includectype.h FILE popen(const char cmdstring,const char type); 真确返回:文件结构的指针;错误返回:空指针。 Int pclose(FILE *fp); 真确返回:cmdstring文件结构的指针;错误返回:-1。 打开一个以命令行为参数的管理文件,完成进程之间的通信进程 例子:以命令行为参数的管理文件的示例。 假设有一个的可执行程序chcase,从标准输出设备读字符,将小写字母转换成大写字母并进行输出。 主程序使用popen创建管道,实现将某文件中的字母转换成大写字母。其中的文本文件名作为参数传进来。源程序如下: #includesys/wait.h #includestdio.h #define MAXLINE 100 int main(int argc,char *argv[]) { char line[MAXLINE]; FILE *fpin,*fpout; if(argc!=2) {

文档评论(0)

1亿VIP精品文档

相关文档