进程——管道
来源:互联网 发布:js裁剪上传图片的插件 编辑:程序博客网 时间:2024/06/06 02:21
管道是一个进程连接数据流到另一个进程的通道, 它通常是用作把一个进程的输出通过
管道连接到另一个进程的输入。在 Linux 命令中通常通过符号“ |”来使用管道,
管道连接到另一个进程的输入。在 Linux 命令中通常通过符号“ |”来使用管道,
例如:
$ ps -ef | grep init
此命令中 ps 是一个独立的进程, grep 也是一个独立的进程,中间的管道把本来要输出
到屏幕的数据输出到 grep 这个进程中,作为 grep 这个进程的输入。
到屏幕的数据输出到 grep 这个进程中,作为 grep 这个进程的输入。
管道分为匿名管道和命名管道两种;
匿名管道主要用于两个进程间有父子关系的进程间通信;
命名管道主要用于没有父子关系的进程间通信;
1. 匿名管道
匿名管道是不能在文件系统中以任何方式看到的半双工管道。半双工管道意味着管道的
一端只读或只写。
匿名管道是不能在文件系统中以任何方式看到的半双工管道。半双工管道意味着管道的
一端只读或只写。
pipe()函数可以用来创建一条匿名管道,它的原型如下:
#include <unistd.h>
int pipe(int pipefd[2]);
int pipe(int pipefd[2]);
函数成功返回 0,否则返回-1。
参数 pipefd 是一个文件描述符数组,对应着打开管道的两端,
其中 pipefd[0]为读端,pipefd[1]为写端,往写端写的数据会被内核缓存起来,直到读端将数据读完。
2. 命名管道
命名管道也被称为 FIFO 文件, 它突破了匿名管道无法在无关进程之间通信的限制,使
得同一主机内的所有的进程都可以通信。
同时命名管道是一个特殊的文件类型,它在文件系统中以文件名的形式存在,在 stat结构中 st_mode 指明一个文件结点是不是命名管道。
2. 命名管道
命名管道也被称为 FIFO 文件, 它突破了匿名管道无法在无关进程之间通信的限制,使
得同一主机内的所有的进程都可以通信。
同时命名管道是一个特殊的文件类型,它在文件系统中以文件名的形式存在,在 stat结构中 st_mode 指明一个文件结点是不是命名管道。
mkfifo()函数用来创建一个命名管道,它的原型如下:
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);
mkfifo()创建一个真实存在于文件系统中的命名管道文件,
参数 pathname指定了文件名,
参数 mode 则指定了文件的读写权限。
参数 mode 则指定了文件的读写权限。
函数成功返回 0,否则返回-1 并设置 errno
mkfifo()创建命名管道文件后,需要通过命名管道通信的进程需要打开该管道文件,然后通过 read、 write 函数像操作普通文件一样进行通信。
0 0
- 进程——管道
- 进程通信——管道
- 进程间通信—管道
- 进程间通信—管道
- 进程通信—命名管道
- 进程间通信—管道
- 进程间通讯—管道
- 进程通信1——管道、命名管道
- 进程间通讯——管道(有名管道)
- Linux进程间通信—无名管道和命名管道
- Windows进程间通信——管道
- 进程间通信——管道(Pipe)
- Linux进程间通信——管道
- 进程间通信——匿名管道
- Linux进程间通信——管道
- Linux进程间通信——管道
- 进程间通信——管道
- 进程间通信——管道
- QT工程文件的条件编译选择与额外的编译参数配置
- Java之Reference使用讲解
- 探讨C++内存回收
- Leetcode89: Unique Paths
- Android每日范例——文字超链接
- 进程——管道
- 小议:End User如何添加自定义的Term?
- Markdown 语法
- ios9:Search API
- git培训提纲
- iOS开发之网络编程SocKet
- 航班经停地查询api 航班经停地及起降时间查询
- 进程——共享内存
- android动画基础初探