linux进程通信之管道

原创 2011年01月21日 22:32:00

    管道:可分为普通管道和命名管道。普通管道用于有亲缘关系的进程间的通信(父子进程).命名管道,通过给管道命名的方式,使得管道变成文件系统中的管道文件,从而允许无亲缘关系的进程间通过访问管道文件进行通信。
    管道是单向的,一端只能用于输入,另一端只能用于输出。管道是FIFO的,即先进先出的,向管道中写入的数据附加至管道缓冲区的尾部,而读数据是从管道缓冲区的头部开始的。普通管道只能用于有亲缘关系的进程间的通信。Linux系统下,管道缓存区为4096字节,缓存区满时,阻塞写操作;缓存区空时,阻塞读操作。
    对管道的操作主要有,创建管道,读写管道,关闭管道。一般情况下,都是由父进程创建管道,并将该管道传递给子进程,这样父子进程就可以通信了。
    创建管道函数:int pipe(int pipedes[2]);
    返回值:0,成功,-1失败。
    pipedes:整形数组,pipedes[0]用于读操作,pipedes[1]用于写操作。
   
    读写管道函数:
        int read(int fd, char * buf, int bufsize);
        int write(int fd, char *buf, int bufsize);
    关闭管道函数: int close(int fd); //管道句柄
    例子:


   
    命名管道:命名管道提供了一个文件名同管道关联。在管道创建成功后,在文件系统中将产生一个物理的FIFO文件。对命名管道的操作,实际上是通过该FIFO文件实现的。命名管道可以用于无亲缘关系的进程进行数据交换。
    管道创建:
  #include <sys/stat.h>
  int mkfifo( const char* pathname,  mode_t mode );
  返回值:0,成功;-1,失败
  pathname:文件路径和文件名。
  mode:管道的访问权限,与文件的访问权限相同。
  
  对管道的打开包括两种方式:阻塞和非阻塞方式。(int open( const char * pathname, int flags);)
  当flags为O_NONBLOCK,将以非阻塞的方式打开。
  1、当使用O_NONBLOCK 旗标时,打开FIFO 文件来读取的操作会立刻返回,但是若还没有其他进程打开FIFO 文件来读取,则写入的操作会返回ENXIO 错误代码。
  2、没有使用O_NONBLOCK 旗标时,打开FIFO 来读取的操作会等到其他进程打开FIFO文件来写入才正常返回。同样地,打开FIFO文件来写入的操作会等到其他进程打开FIFO文件来读取后才正常返回。
  
  例子:


版权声明:本文为博主原创文章,未经博主允许不得转载。

Linux进程通信——管道

进程间通信(IPC:Inner Proceeding Communication) 进程是操作系统实现程序独占系统运行的假象的方法,是对处理器、主存、I/O设备的抽象表示。每个进程都是一个独立的...

Linux进程通信(一)——pipe管道

本章内容 采用pipe管道如何进行进程之间的通信 pipe管道进程通信的规则和限制 Linux中pipe管道的实现机制和管理pipe管道的结构体 什么是进程通信进程通信就是两个进程之间进行数据交换,在...

linux基础编程:进程通信之管道

在文章《linux基础编程:进程通信之信号》中,我们看到信号作为进程之间的通信方式。但是传送的信息之限于一个信号值。而本文将会介绍Linux支持的最初Unix IPC之一:管道和命名管道,它允许进程之...

linux进程通信--管道

管道分为有名管道和无名管道。 无名管道: 无名管道是半双工的,就是对于一个管道来讲只能读或者写。就像高速公路一样一条路只能单向行驶。 无名管道,只能在相关的,有亲缘关系的进程使用。例如:一个for...

linux先进程通信 管道方式和消息队列

#include #include #include #include typedef long long ll; #define eps 1e-8 using namespace std; in...

linux进程通信--有名管道

在前面介绍了无名管道的通信方式,无名管道主要用于具有亲缘关系的进程通信(包括父进程与子进程通信以及兄弟进程通信),本文介绍有名管道通信,那么可想而知,有名管道是用于任意两个进程之间的通信。 特点可以实...

Linux进程通信IPC--管道Pipe/Named Pipe

Linux 进程间通信 管道(Pipe)

浅谈linux系统下的进程通信之管道pipe

一、浅谈进程通信和管道            谈到进程间通信,就是在数据上不同进程上的共享,让不同的进程看到同一份物理内存。此过程必须通过内核(就是同常意义上的操作系统),在内核中开辟一块缓冲区,把进...
  • pamelay
  • pamelay
  • 2017年02月16日 18:42
  • 129

Linux进程通信-管道(pipe)

简述  在Linux系统中,管道是一种最基本的IPC机制,要理解管道的机制,我们可以举一个简单的例子,在linux系统下的进程都是独立,如果两个进程需要交流也就是通信,我们需要开辟一个他们两个可以共同...
  • Exziro
  • Exziro
  • 2017年06月06日 12:32
  • 220

Linux进程通信——管道

进程间通信(IPC:Inner Proceeding Communication) 进程是操作系统实现程序独占系统运行的假象的方法,是对处理器、主存、I/O设备的抽象表示。每个进程都是一个独立的资源...
  • diaoaa
  • diaoaa
  • 2014年10月13日 20:49
  • 1098
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux进程通信之管道
举报原因:
原因补充:

(最多只允许输入30个字)