IPC-管道
Posted Action_er
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IPC-管道相关的知识,希望对你有一定的参考价值。
一:概括介绍
管道分为无名管道和有名管道。
二:无名管道
是 UNIX 系统IPC最古老的形式。有如下的特点:
1:半双工的,数据只能在一个方向上传输,有固定的读端和写端。
2:只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。
3:可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。
三:涉及的函数
1:涉及函数
#include <unistd.h> int pipe(int fd[2]);/*返回值:若成功返回0,失败返回-1*/
当一个管道建立时,会创建两个文件描述符:fd[0]
为读而打开,fd[1]
为写而打开。要关闭管道只需将这两个文件描述符关闭即可。
2:实例
如果从父进程发送数据到子进程,则关闭父进程的读端(fd[0]
)与子进程的写端(fd[1]
);反之,则可从子进程发送数据到父进程。
#include <stdio.h> #include <unistd.h>
#include <string.h> int main() { int fd[2]; /*两个文件描述符*/ pid_t pid; char buf_f[20];
char buf_b[20];
memset(buf_f,0,sizeof(buf_f));
memset(buf_b,0,sizeof(buf_b)); if(pipe(fd) < 0) /*创建管道*/ {
printf("Create Pipe Error!\n");
} if((pid = fork()) < 0) /*创建子进程*/ {
printf("fork Error!\n");
} else if(pid > 0) /*父进程*/ { close(fd[0]); /*关闭读端*/
buf_f = "hello boy,I‘m father!!!"; write(fd[1], buf_f, 12); } else { close(fd[1]); /*关闭写端*/ read(fd[0], buf_b, 20); printf("%s \n", buf_b); } return 0; }
以上是关于IPC-管道的主要内容,如果未能解决你的问题,请参考以下文章