linux 匿名管道实例详解
发布时间 - 2026-01-11 01:59:59 点击率:次linux中进程的一种通信方式——匿名管道

pipe函数建立管道
调用pipe函数时在内核中开辟一块缓冲区(称为管道)用于通信,它有一个读端一个写端,然后通过_pipe参数传出给用户程序两个文件描述符,_pipe[0]指向管道的读端,_pipe[1]指向管道的写端。所以管道在用户程序看起来就像一个打开的文件,通过read(_pipe[0]);或者write(_pipe[1]);向这个文件读写数据其实是在读写内核缓冲区。pipe函数调用成功返回0,调用失败返回-1。
1父进程调用pipe开辟管道,得到两个文件描述符指向管道的两端。
2. 父进程调用fork创建⼦进程,那么子进程也有两个文件描述符指向同一管道。
3. 父进程关闭管道读端,子进程关闭管道写端。父进程可以往管道里写,子进程可以从管道⾥读,管道是用环形队列实现的,数据从写端流入从读端流出,这样就实现了进程间通信
匿名管道间的通信是单向的,并且是、只能是具有血缘关系的进程间通信
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int _pipe[2];
int ret = pipe(_pipe);
if (ret < 0)
{
perror("pipe");
return 1;
}
pid_t id = fork ();
if (id<0)
{
perror("fork");
return 2;
}
else if (id == 0)
{
// child
int count =5;
close (_pipe[0]);
char* msg = "hello bit";
while (count --)
{
write(_pipe[1],msg,strlen(msg));
sleep(1);
}
close (_pipe[1]);
exit(123);
}
else
{
// Father
close(_pipe[1]);
char buf[128];
while(1)
{
int count =5;
ssize_t s = read ( _pipe[0],buf,sizeof(buf)-1);
if (s<0)
{
perror("read");
}
else if(s==0)
{
printf("write is close\n");
return 2;
}
else
{
buf[s] ='\0';
printf ("child >> father: %s\n",buf);
}
count --;
if (count == 0)
{
close (_pipe[0]);
break;
}
}
int status = 0;
pid_t _wait = waitpid (id, &status,0);
if (_wait > 0)
{
printf("exit code is %d, signal is %d\n",
WIFEXITED(status), status & 0xff);
}
}
return 0;
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# linux
# 匿名管道
# 匿名管道详解
# Linux通过匿名管道进行进程间通信
# Linux管道揭秘之匿名管道连接进程世界的方法
# 是在
# 也有
# 就像
# 希望能
# 谢谢大家
# 有一个
# 血缘关系
# 实现了
# 以往
# int
# brush
# class
# pre
# cpp
# stdio
# gt
# string
# stdlib
# unistd
# include
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在IIS管理器中快速创建并配置网站?
java ZXing生成二维码及条码实例分享
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
JavaScript常见的五种数组去重的方式
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
如何在宝塔面板中创建新站点?
EditPlus中的正则表达式 实战(1)
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
Laravel如何实现文件上传和存储?(本地与S3配置)
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
JavaScript实现Fly Bird小游戏
如何用搬瓦工VPS快速搭建个人网站?
如何快速查询域名建站关键信息?
英语简历制作免费网站推荐,如何将简历翻译成英文?
jQuery validate插件功能与用法详解
Laravel API资源类怎么用_Laravel API Resource数据转换
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
如何快速登录WAP自助建站平台?
微信公众帐号开发教程之图文消息全攻略
如何在阿里云服务器自主搭建网站?
PHP 500报错的快速解决方法
Python图片处理进阶教程_Pillow滤镜与图像增强
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
如何快速生成可下载的建站源码工具?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Java解压缩zip - 解压缩多个文件或文件夹实例
大同网页,大同瑞慈医院官网?
详解Android——蓝牙技术 带你实现终端间数据传输
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
浅谈Javascript中的Label语句
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
如何在云指建站中生成FTP站点?
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
QQ浏览器网页版登录入口 个人中心在线进入
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
Laravel如何实现一对一模型关联?(Eloquent示例)
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
如何用wdcp快速搭建高效网站?
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
Python正则表达式进阶教程_复杂匹配与分组替换解析
WEB开发之注册页面验证码倒计时代码的实现
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?

