admin 管理员组文章数量: 887021
2024年1月14日发(作者:anticipates)
实验7 Linux进程通信-管道
一、实验目的:
1)掌握操作系统的进程通信原理。
2)熟悉linux的进程通信方式。
3)设计程序,实现管道通信。
二、实验原理:
1、函数pipe
头文件:#include
原型:int pipe(int filedes[2]);
说明:pipe建立管道,并将文件描述符由参数filedes数组返回,filedes[0]为管道里的读取端,filedes[1]则为管道的写入端。若成功返回0,否则返回-1。
2、函数close
头文件:#include
原型:int close(int fd);
说明:当使用完文件后若不再需要则可使用close关闭该文件,若成功返回0,否则返回-1。
3、函数write
头文件:#inclue
原型:ssize_t write(int fd,const void *buf,size_t count);
说明:write函数把参数buf所指的内存写入count个字节到参数fd所指的文件内。如果成功返回实际写入的字节数,否则返回-1。
4、函数strlen
头文件:#include
原型:size_t strlen(const char *s);
说明:函数strlen用来计算指定的字符串s的长度,不包括结束字符’0’。
5、函数memset
头文件:#include
原型:void *memset(void *s,int c,size_t n);
说明:函数memset将参数s所指的内存区域前n个字节以参数c填入,然后返回指向s的指针。若需要将某一数组初始化,memset函数会相当方便。
6、函数read
头文件:#include
原型:ssize_t read(int fd,void *buf,size_t count)
说明:函数read将参数fd所指的文件传送count个字节到buf指针所如指的内存中。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或无可读取的数据。
7、函数mkfifo
头文件:#include
#include
原型:int mkfifo(const char *pathname,mode_t mode);
说明:函数mkfifo按照参数pathname建立特殊的FIFO文件,该文件必须不在在,参数mode为该文件的权限。若成功返回0,否则返回-1。
8、函数open
头文件:#include
#include
#include
原型:int open(const char *pathname,int flags);
说明:参数pathname是指向欲打开的文件路径字符串,参数flags表示打开文件的方式,O_RDONLY表示只读方式打开文件,O_WRONLY表示以只写方式打开文件,O_RDWR表示以读写方式打开文件。若成功返回0,否则返回-1。
三、实验内容:
1)无名管道的实现
1、编写7_1.c程序
[root@localhost]#vi 7_1.c
编译:[root@localhost]#gcc 7_1.c –o 7_1
运行:[root@localhost]#./7_1
查看并分析运行结果:
2)有名管道的实现
1、编写7_2.c程序:
[root@localhost]#vim 7_2.c
编译:[root@localhost]#gcc 7_2.c –o 7_2
2、编写7_3.c程序:
[root@localhost]#vim 7_3.c
编译:[root@localhost]#gcc 7_3.c –o 7_3
3、打开第一个终端窗口并运行7_2.c
运行:[root@localhost]#./7.2
输入消息,输入abcdefg消息以回车结束。
查看结果:
4、打开第二个终端窗口并运行7_3.c
运行:[root@localhost]#./7.3
查看结果:
版权声明:本文标题:操作系统实验7Linux进程通信-管道 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1705182927h475868.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论