linux子进程往管道,Linux 下父进程与子进程的通信(pipe管道)

转自http://siqun.blog.163.com/blog/static/213496001201341231121720/

每个进程各自有不同的用户地址空间,任 何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。如下图所示。

进程间通信

linux子进程往管道,Linux 下父进程与子进程的通信(pipe管道)_第1张图片

管道是一种最基本的IPC机制,由pipe函数创建:

linux子进程往管道,Linux 下父进程与子进程的通信(pipe管道)_第2张图片

调 用pipe函数时在内核中开辟一块缓冲区(称为管道)用于通信,它有一个读端一个写端,然后通过filedes参数传出给用户程序两个文件描述 符,filedes[0]指向管道的读端,filedes[1]指向管道的写端(很好记,就像0是标准输入1是标准输出一样)。所以管道在用户程序看起来 就像一个打开的文件,通过read(filedes[0]);或者write(filedes[1]);向这个文件读写数据其实是在读写内核缓冲区。 pipe函数调用成功返回0,调用失败返回-1。

你可能感兴趣的:(linux子进程往管道)