当前位置:网站首页>unix系统编程 第十五章 15.2管道
unix系统编程 第十五章 15.2管道
2022-08-09 10:26:00 【玛丽苏打肉饼】
管道是UNIX系统IPC的最古老形式,所有UNIX系统都提供此种通信机制。
管道有以下两种局限性:
- 历史上,它们是半双工的(即数据都只在一个方向上面流动)。现在某些系统提供全双工管道。
- 管道只能在具有公共祖先的两个进程之间使用,通常,一个管道由一个进程创建,在进程调用fork之后,这个管道就能在父进程和子进程之间使用了。
我们将会看到FIFO没有第二种局限性,UNIX域套接字没有这两种局限性。
管道是通过调用pipe函数创建的。
#include <unistd.h>
int pipe(int fd[2]);//返回值,成功返回0,出错返回-1
经由参数fd返回两个文件描述符:fd[0]为读而打开,fd[1]为写而打开。fd[1]的输出是fd[0]的输入。
单个进程的管道几乎没有任何用处,通常,进程会先调用pipe,接着调用fork,从而创建从父进程到子进程的IPC通道,反之亦然。
fork之后做什么取决于我们想要的数据流方向,对于从父进程到子进程的管道,父进程关闭管道的读端,子进程关闭写端。
当管道一端被关闭以后,下列两条规则起作用。
- 当读一个写端已被关闭的管道时,在所有数据都被读取后,read返回0,表示文件结束。
- 如果写一个读端已被关闭的通道,则产生信号SIGPIPE.如果忽略该信号或者捕捉该信号并从其处理程序返回,则write返回-1,errno设置为EPIPE。
示例程序:
#include "apue.h"
int main()
{
int n;
int fd[2];
pid_t pid;
char line[MAXLINE];
if(pipe(fd)<0)
err_sys("pipe error");
if((pid=fork())<0)
err_sys("fork error");
else if(pid>0)
{
close(fd[0]);
write(fd[1],"hello world\n",12);
}
else
{
close(fd[1]);
n=read(fd[0],line,MAXLINE);
write(STDOUT_FILENO,line,n);
}
exit(0);
}
边栏推荐
猜你喜欢
自启服务mock联调跨域问题
Attentional Feature Fusion
[ASM] Bytecode operation MethodVisitor case combat generation object
浅析JWT安全问题
Demand side power load forecasting (Matlab code implementation)
Attentional Feature Fusion
第二周作业
【MySQL】mysql因为字符集导致left join出现Using join buffer (Block Nested Loop)
深度学习--生成对抗网络(Generative Adversarial Nets)
ArrayList和LinkedList
随机推荐
[贴装专题] 视觉贴装平台与贴装流程介绍
对话跨国消费品牌DPO:数据安全合规从何做起?8.11直播见!
mongodb学习笔记
basic operator
Master-slave postition changes cannot be locked_Slave_IO_Running shows No_Slave_Sql_Running shows No---Mysql master-slave replication synchronization 002
Win7 远程桌面限制IP
[Halcon&定位] 解决Roi区域外的模板匹配成功
深度学习--循环神经网络(Recurrent Neural Network)
The GNU Privacy Guard
可能95%的人还在犯的PyTorch错误
虚拟列表key复用问题
ESIM(Enhanced Sequential Inference Model)- 模型详解
1003 我要通过! (20 分)
阿里神作!吃透这份资料入厂率高达99%
【MySQL】mysql因为字符集导致left join出现Using join buffer (Block Nested Loop)
BERT预训练模型(Bidirectional Encoder Representations from Transformers)-原理详解
xmms的歌词显示及音量控制OK
在犹豫中度过了老多天,今天的工作时记录
强化学习 (Reinforcement Learning)
[贴装专题] 贴装流程中涉及到的位置关系计算