linux 管道通信
来源:互联网 发布:网络相关的专业 编辑:程序博客网 时间:2024/06/05 22:51
无名管道:
1)管道是半双工的,只能支持数据的单向流动;两进程间需要通信时需要建立起两个管道;
2)使用无名管道通讯的进程必须拥有公共祖先进程
pipe:
1) 头文件 :
<span style="white-space:pre"></span>#include<unistd.h>
2) 定义函数:
<span style="white-space:pre"></span>int pipe(int filedes[2]);
3) 函数说明:
pipe()会建立管道,并将文件描述词由参数filedes数组返回。
filedes[0]为管道里的读取端。filedes[1]则为管道的写入端。
4) 返回值:
若成功则返回零,否则返回-1,错误原因存于errno中。
错误代码:EMFILE 进程已用完文件描述词最大量
ENFILE 系统已无文件描述词可用。
EFAULT 参数 filedes 数组地址不合法。
pipen:
1) 头文件 :
<span style="white-space:pre"></span>#include <stdio.h>
2) 定义函数:
<span style="white-space:pre"></span>FILE *popen(const char *command, const char *type);
<span style="white-space:pre"></span>int pclose(FILE *stream);
3) 函数说明:
command 参数是一个字符串指针
指向的是一个以 null 结束符结尾的字符串, 这个字符串包含一个 shell 命令. 这个命令被送到 /bin/sh 以 -c 参数执行, 即由 shell 来执行.
type 参数也是一个指向以 null 结束符结尾的字符串的指针
这个字符串必须是 'r' 或者 'w’ 来指明是读还是写。
stream 参数是一个普通的 标准I/O流, stream 只能用 pclose() 函数来关闭, 而不是 fclose() 函数.
4) 相关说明:
向这个流的写入被转化为对 command 命令的标准输入; 而 command 命令的标准输出则是和调用 popen(), 函数的进程相同,除非这个被command命自己改变. 相反的, 读取一个 “被popen了的” 流, 就相当于读取 command 命令的标准输出, 而 command 的标准输入则是和调用 popen, 函数的进程相同.注意, popen 函数的输出流默认是被全缓冲的.
pclose() 函数等待相关的进程结束并返回 一个 command 命令的 退出状态, 就像 wait4 函数 一样
有名管道:
(1)半双工
(2)使用有名管道通讯的进程不需要有公共祖先进程
mkfifo:
1) 头文件 :
<span style="white-space:pre"></span>#include<sys/stat.h>
2) 定义函数:
<span style="white-space:pre"></span>int mkfifo(const char* pathname, mode_t mode);
3) 函数说明:
pathname 参数创建的FIFO路径
mode参数指定创建的FIFO访问模式。这个访问会与当前进程的umask进程运算,以产生实际应用的权限模式。
4) 返回值:
错误代码:
EACCESS 参数pathname 所指定的目录路径无可执行的权限
EEXIST 参数pathname 所指定的文件已存在.
ENAMETOOLONG 参数pathname 的路径名称太长.
ENOENT 参数pathname 包含的目录不存在
ENOSPC 文件系统的剩余空间不足
ENOTDIR 参数pathname 路径中的目录存在但却非真正的目录.
EROFS 参数pathname 指定的文件存在于只读文件系统内.
- Linux进程通信:管道
- Linux 管道通信
- Linux进程通信-管道
- Linux管道通信
- Linux管道通信
- linux 管道通信
- linux管道通信
- linux历程--管道通信
- Linux通信之管道
- Linux 管道通信 .
- linux管道通信
- linux下管道通信
- linux有名管道通信
- linux管道通信
- linux 进程通信 ----管道
- linux 管道通信
- linux 内核管道通信
- Linux管道通信
- 【Python Challenge-8】integrity
- 2014年acm-icpc广州regional网络赛经历
- NYOJ-a letter and a number
- 小球在屏幕上随机移动
- LVM 逻辑卷管理
- linux 管道通信
- 黑马程序员————JAVA之交通灯管理系统
- 阿里上市不会真正冲击美互联网版图
- java查找匹配的文本
- WebBrowser设置为ie8模式
- UVA - 490 Rotating Sentences
- GDB的字符终端的替换工具——CGDB的使用与介绍
- 阿里巴巴上市首日上涨38% 市值2314亿美元
- 单词翻转