当前位置:网站首页>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);
}
边栏推荐
猜你喜欢

想了解API接口,这一篇就够了

electron 应用开发优秀实践
![[Halcon&定位] 解决Roi区域外的模板匹配成功](/img/ad/549c7e6336ef62469a7c71e6bfcb42.png)
[Halcon&定位] 解决Roi区域外的模板匹配成功

使用cpolar远程连接群晖NAS(创建临时链接)

OneNote 教程,如何在 OneNote 中搜索和查找笔记?

ESIM(Enhanced Sequential Inference Model)- 模型详解

相伴成长,彼此成就 用友U9 cloud做好制造业数智化升级的同路人

浅析JWT安全问题
![[ASM] Bytecode operation MethodVisitor case combat generation object](/img/a9/df07614f875794d55d530bd04dc476.jpg)
[ASM] Bytecode operation MethodVisitor case combat generation object

3D printed this DuPont cable management artifact, and the desktop is no longer messy
随机推荐
[Halcon&定位] 解决Roi区域外的模板匹配成功
[贴装专题] 基于多目视觉的手眼标定
WUSTOJ:n个素数构成等差数列
Win32控件--------------------WM_DRAWITEM消息测试程序
判断一段文字的width
RTP
KeyBERT和labse提取字符串中的关键词
tuple dictionary collection
小程序员的发展计划
Quick sort eight sorts (3) 】 【 (dynamic figure deduction Hoare, digging holes, front and rear pointer method)
1: bubble sort
OneNote 教程,如何在 OneNote 中搜索和查找笔记?
深度学习--自编码器(AutoEncoder)
第二周作业
单元测试1之单元测试的引用
京东物流与五菱将开发联名版定制产品
Technology Sharing | Sending Requests Using cURL
浅析JWT安全问题
day16_03集合
元组 字典 集合