linux无名管道实验代码,Linux 进程间通讯之创建无名管道和读写无名管道
Linux进程间通讯的方式:
1. 管道(pipe)和有名管道(FIFO).
2. 信号(signal)
3. 消息队列
4. 共享内存
5. 信号量
6. 套接字(socket)
管道通讯:
无名管道:由pipe()函数创建,int pipe(int filedis[2]), 当管道建立时有两个文件描述符,filedis[0]用于读管道,filedis[1]用于写管道。关闭管道,仅需将两个文件描述符关闭即可。
创建无名管道pipe():
#include
#include
int main(){
intpipe_filed[2];
if(pipe(pipe_filed)<0){
printf("pipecreate failed.\n");
return-1;
}
else{
printf("pipecreate successfully.\n");
close(pipe_filed[0]); //关闭相应读管道(必须要)
close(pipe_filed[1]); //关闭相应写管道(必须要)
}
}
注:fork()必须在pipe()之前来创建子进程,否则子进程无法进程相应的文件描述符,如果在fork之后,那么fork会在子/父进程各执行一次,属不同的管道。
读写无名管道示例:
#include
#include
#include
#include
int main(){
charcache[100];
intfiledis[2];
if(pipe(filedis)< 0){
printf("Createpipe failed.\n");
return-1;
}
memset(cache,0, sizeof(cache)); //在一段内存块中填充某个特定的值,此为,对cache数组以0进行填充
intpid;
pid= fork(); // 创建子进程
if(pid== 0){ // 进入子进程
printf("Inchild process.\n");
close(filedis[1]); // 关闭写管道
sleep(3); // 等待,为了等父进程写入东西
read(filedis[0],cache, 100); // 读管道,并将内容写入cache之中
printf("%s.\n",cache); // 打印cache内容
close(filedis[0]); // 关闭读管道
}
elseif(pid > 0){ // 进入父进程
printf("Inparent process.\n");
close(filedis[0]); // 关闭读管道
write(filedis[1],"Hello ",6); // 第一次写入
write(filedis[1],"linuxdba", 8); // 第二次写入
close(filedis[1]); // 关闭写管道
wait(NULL); // 等待子进程退出再往下执行
}
else{
printf("Createchild process failed.\n");
return-1;
}
return0;
}
linux无名管道实验代码,Linux 进程间通讯之创建无名管道和读写无名管道相关推荐
- 【Linux】-- 进程间通讯
目录 进程间通讯概念的引入 意义(手段) 思维构建 进程间通信方式 管道 站在用户角度-浅度理解管道 匿名管道 pipe函数 站在文件描述符角度-深度理解管道 管道的特点总结 管道的拓展 单机版的负载 ...
- Linux 进程间通讯方式 pipe()函数
Linux 进程间通讯方式有以下几种: 1->管道(pipe)和有名管道(fifo). 2->消息队列 3->共享内存 4->信号量 5->信号(signal) 6-&g ...
- 进程间通讯 --- 管道(半双工通信)
管道: 一个进程输出数据到另一个进程数据输入的通道.(半双工通信:同一时间,只能一端读另一端写,因为只有一条信道) 有名管道(命令管道): 在磁盘上会存在一个管道文件标识,但管道文件不占用磁盘bloc ...
- linux命名管道进程间通信,Linux进程间通讯--命名管道
IPC安全 前面总结了匿名管道,如今来看命名管道:因为匿名管道的一个限制就是:只能是有血缘关系的进程间才能够通讯,好比:有两个同祖先的子进程,父子进程等:为了突破这一个限制,想让没有任何关系的两个进程 ...
- 【Linux】进程间通讯之管道
进程间通信的机制包括:管道.信号量.共享内存.消息队列. 这篇博客主要介绍的是进程间通讯之管道的应用 一.管道的分类 管道都属于半双工通讯机制 管道分为有名管道和无名管道 1.有名管道 在磁盘上有一个 ...
- 【Linux】进程间通讯
前提知识 进程间具有独立性 ,现在我们要打破独立性,去通讯,所以 通讯的成本一定很高. 又时候又需要多进程协同完成某种业务内容 ,例如以前: cat file | grep "hello&q ...
- Linux系统编程(三)进程间的通信
Linux系统编程(三)进程间的通信 一.为什么需要进程之间的通信(IPC)? 二.管道 1.概念 2.特质 3.原理 4.局限性 5.代码 2.读入数据 三.共享存储映射 注意事项 父子进程通信 一 ...
- linux open 头文件_linux下通过共享内存和mmap实现进程间通讯
前言 最近在学习GNU/Linux内核,看到mmap的时候书上说: mmap/munmap接口函数是用户最常用的两个系统调用接口,无论是在用户程序中分配内存.读写大文件.链接动态库文件,还是多进程间共 ...
- linux mmap实例_Linux下通过共享内存和mmap实现进程间通讯(含实例)
前言 最近在学习GNU/Linux内核,看到mmap的时候书上说: mmap/munmap接口函数是用户最常用的两个系统调用接口,无论是在用户程序中分配内存.读写大文件.链接动态库文件,还是多进程间共 ...
最新文章
- vscode 高效使用指南
- 再学 GDI+[11]: DrawCurve - 绘制曲线
- Entity Framework如何得到数据库表的名字
- LeetCode: Longest Consecutive Sequence [128]
- mysql将权限分为几个层级_MySQL多层级结构-区域表使用树详解
- Django,Ajax,Vue实现文章评论功能
- 这样写代码,真是帅到没有朋友
- mimo-ofdm无线通信技术及matlab实现_智芯文库 | FPGA无线通信课程连载——扰码的原理及实现...
- Vcpkg 的安装与使用
- 安装SqlServer2008时出现重新启动电脑但是重启电脑也不行
- 计算机脚本发生错误,我的电脑开机后显示当前页面的脚本发生错误?
- 高质量外链的十大特性
- 机器学习笔记1-What is Machine Learning
- ipa文件如何下载安装OR如何设置IPA文件下载链接
- DSS部署-12、DSS安装
- plotly入门(vue项目中)
- 用原生js制作一个动态简历(多动症简历)及在线预览部署过程
- 【RabbitMQ】什么是RabbitMQ?RabbitMQ有什么用?应用场景有那些?
- 【U8+】用友U8+12.0在win11系统上IE Web Control 组件无法安装
- Java学习之路--计算圆形的面积和周长