资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
实验题目姓名进程的管道及消息通信班级小组合作学号否一、实验目的1、为了掌握 linux 进程通信系统调用的功能, 这里给出了进程通信实现机制中使用的系统调用命令的格式和如何利用系统调用命令进行进程通信编程, 以便通过学习, 提高学生对进城通信系统调用的编程能力。2、理解进程通信的原理,掌握管道通信机制,熟悉无名管道和有名管道通信的实现。二实验环境Windows xp、VMware、Linux 系统三、实验内容与步骤(1)编写两个程实现进程的无名管道和有名管道通信。要求分别调用 pipe()、close()、write() 、read()、popen()、pclose()、mknod()、mkfifo() 、open()实现多个进程间的通信。(2)调试并分析结果。对观察到的内容做详细记录分析,并写出实验报告。四、实验过程与分析1.使用无名管道pipe(),进行父子进程之间的通信。编写的程序如下:运行结果如下:结果分析:父进程首先被调用时,运行结果为:之后父进程阻塞等待子进程终止, 当系统调度子进程运行时, 输出如下的信息:之后父进程被唤醒,调度运行,输出如下结果后程序退出。对于以上的结果:首先父进程使用 pipe(chan1)系统调用打开一个无名管道,之后创建一个子进程。子进程复制父进程的打开文件表。为了正确通信,父进程关闭读通道 close(chan10),子进程关闭写通道 close( chan11)。父进程向管道写,子进程从管道读。完成一次通信之后,父进程分别关闭自己的写 /读通信,管道文件消失。2.以命名行为参数的管道文件的示例。 ( 假设有一个可执行程序chcase,从标准输入设备读字符, 将小写字母转化成大写字母并输出。主程序使用 popen创建管道,实现蒋某文本文件中的字幕转化成大写字母,其中的文本文件名作为参数传进来。 )编写的程序如下:运行结果是:结果分析:通过程序运行结果可知,先打开文本文件,如果文本打开失败,则执行 exit(1),退出程序,如果文本通过函数开成功, 则 popen创建一个可写管道,将命令行chcase的输入与管道的输入连接起来,然后向管道输入数据, 此时命令行就可以通过管道接受文本文件的数据了 ,在从文件中读出数据时,独处的内容放在line 数组中 ,fpin 表示从刚打开的文件里读出。 之后要编写字母大小写转化函数,来实现小写字母转化成大写字母。3.创建有名管道。编写的程序如下:运行结果是:前台运行结果:后台运行结果:结果分析:此程序是把管道和命令联系起来, read( )的系统调用格式是 read(fd,buf,n),参数定义是 int read(fd,buf,n); int fd; char *buf; unsigned n;它的功能是从 fd 所指示的文件中读出 n 个字节的数据,并将它们送至由指针 buf 所指示的缓冲区中。 如该文件被加锁,等待,直到锁打开为止; write( ) 系统调用格式是 read(fd,buf,n),它的功能是把 n 个字节的数据,参数定义同 read( ),而父进程则从管道中读出来自两个进程的信息, 显示在屏幕上。 从 buf 所指向的缓冲区写到由 fd所指向的文件中。程序中的string0+=1 表示字符串中的第一个字符的 ASCII 加 1对以上程序的整体分析:管道是单向的、 先进先出的,它把一个进程的输出和另一个进程的输入连接在一起。一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读出数据,管道包括无名管道和有名管道两种,前者用于父进程和子进程间的通信, 后者可用于运行于同一系统中的任意两个进程间的通信。五、实验总结通过这次实验使我掌握理解了进程通信的原理, 掌握管道通信机制和 linux 中无名管道和有名管道创建,以及管道通信的实现;同时也掌握了 linux 进程通信系统调用的功能和系统调用命令的格式和如何利用系统调用命令进行进程通信编程。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号