码迷,mamicode.com
首页 > 其他好文 > 详细

IPC(1)-管道

时间:2019-11-27 23:33:56      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:hello   其他   write   失败   打开   close   bsp   lse   sizeof   

一:概括介绍

     管道分为无名管道和有名管道。

二:无名管道

     是 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(1)-管道

标签:hello   其他   write   失败   打开   close   bsp   lse   sizeof   

原文地址:https://www.cnblogs.com/xinghuo123/p/11946120.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!