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

查看结果:


本文标签: 文件 参数 返回 打开 管道