第1页共7页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共7页在linux下使用管道来进行聊天的小程序1管道管道是一种最基本的IPC机制,由pipe函数创建:#includeintpipe(intfiledes[2]);调用pipe函数时在内核中开辟一块缓冲区(称为管道)用于通信,它有一个读端一个写端,然后通过filedes参数传出给用户程序两个文件描述符,filedes[0]指向管道的读端,filedes[1]指向管道的写端(很好记,就像0是标准输入1是标准输出一样)
所以管道在用户程序看起来就像一个打开的文件,通过read(filedes[0]);或者write(filedes[1]);向这个文件读写数据其实是在读写内核缓冲区
pipe函数调用成功返回0,调用失败返回-1
开辟了管道之后如何实现两个进程间的通信呢
比如可以按下面的步骤通信
第2页共7页第1页共7页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共7页1
父进程调用pipe开辟管道,得到两个文件描述符指向管道的两端
父进程调用fork创建子进程,那么子进程也有两个文件描述符指向同一管道
父进程关闭管道读端,子进程关闭管道写端
父进程可以往管道里写,子进程可以从管道里读,管道是用环形队列实现的,数据从写端流入从读端流出,这样就实现了进程间通信
例管道#include#include第3页共7页第2页共7页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第3页共7页#defineMAXLINE80intmain(void){intn;intfd[2];pid_tpid;charline[MAXLINE];if(pipe(fd)