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-管道的主要内容,如果未能解决你的问题,请参考以下文章

Linux(IPC)中的管道损坏

通过共享内存和管道的 IPC 给出分段错误:C 中的 11

IPC-管道

进程间通信(IPC)介绍

Linux 管道示例。 IPC管道创建

查漏补缺:进程间通信(IPC):管道