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 进程间通讯之创建无名管道和读写无名管道相关推荐

  1. 【Linux】-- 进程间通讯

    目录 进程间通讯概念的引入 意义(手段) 思维构建 进程间通信方式 管道 站在用户角度-浅度理解管道 匿名管道 pipe函数 站在文件描述符角度-深度理解管道 管道的特点总结 管道的拓展 单机版的负载 ...

  2. Linux 进程间通讯方式 pipe()函数

    Linux 进程间通讯方式有以下几种: 1->管道(pipe)和有名管道(fifo). 2->消息队列 3->共享内存 4->信号量 5->信号(signal) 6-&g ...

  3. 进程间通讯 --- 管道(半双工通信)

    管道: 一个进程输出数据到另一个进程数据输入的通道.(半双工通信:同一时间,只能一端读另一端写,因为只有一条信道) 有名管道(命令管道): 在磁盘上会存在一个管道文件标识,但管道文件不占用磁盘bloc ...

  4. linux命名管道进程间通信,Linux进程间通讯--命名管道

    IPC安全 前面总结了匿名管道,如今来看命名管道:因为匿名管道的一个限制就是:只能是有血缘关系的进程间才能够通讯,好比:有两个同祖先的子进程,父子进程等:为了突破这一个限制,想让没有任何关系的两个进程 ...

  5. 【Linux】进程间通讯之管道

    进程间通信的机制包括:管道.信号量.共享内存.消息队列. 这篇博客主要介绍的是进程间通讯之管道的应用 一.管道的分类 管道都属于半双工通讯机制 管道分为有名管道和无名管道 1.有名管道 在磁盘上有一个 ...

  6. 【Linux】进程间通讯

    前提知识 进程间具有独立性 ,现在我们要打破独立性,去通讯,所以 通讯的成本一定很高. 又时候又需要多进程协同完成某种业务内容 ,例如以前: cat file | grep "hello&q ...

  7. Linux系统编程(三)进程间的通信

    Linux系统编程(三)进程间的通信 一.为什么需要进程之间的通信(IPC)? 二.管道 1.概念 2.特质 3.原理 4.局限性 5.代码 2.读入数据 三.共享存储映射 注意事项 父子进程通信 一 ...

  8. linux open 头文件_linux下通过共享内存和mmap实现进程间通讯

    前言 最近在学习GNU/Linux内核,看到mmap的时候书上说: mmap/munmap接口函数是用户最常用的两个系统调用接口,无论是在用户程序中分配内存.读写大文件.链接动态库文件,还是多进程间共 ...

  9. linux mmap实例_Linux下通过共享内存和mmap实现进程间通讯(含实例)

    前言 最近在学习GNU/Linux内核,看到mmap的时候书上说: mmap/munmap接口函数是用户最常用的两个系统调用接口,无论是在用户程序中分配内存.读写大文件.链接动态库文件,还是多进程间共 ...

最新文章

  1. vscode 高效使用指南
  2. 再学 GDI+[11]: DrawCurve - 绘制曲线
  3. Entity Framework如何得到数据库表的名字
  4. LeetCode: Longest Consecutive Sequence [128]
  5. mysql将权限分为几个层级_MySQL多层级结构-区域表使用树详解
  6. Django,Ajax,Vue实现文章评论功能
  7. 这样写代码,真是帅到没有朋友
  8. mimo-ofdm无线通信技术及matlab实现_智芯文库 | FPGA无线通信课程连载——扰码的原理及实现...
  9. Vcpkg 的安装与使用
  10. 安装SqlServer2008时出现重新启动电脑但是重启电脑也不行
  11. 计算机脚本发生错误,我的电脑开机后显示当前页面的脚本发生错误?
  12. 高质量外链的十大特性
  13. 机器学习笔记1-What is Machine Learning
  14. ipa文件如何下载安装OR如何设置IPA文件下载链接
  15. DSS部署-12、DSS安装
  16. plotly入门(vue项目中)
  17. 用原生js制作一个动态简历(多动症简历)及在线预览部署过程
  18. 【RabbitMQ】什么是RabbitMQ?RabbitMQ有什么用?应用场景有那些?
  19. 【U8+】用友U8+12.0在win11系统上IE Web Control 组件无法安装
  20. Java学习之路--计算圆形的面积和周长

热门文章

  1. 犀牛建模软件的学习了解
  2. linux下的gedit命令使用方法与技巧
  3. 解决Maven创建java项目缺少resources文件夹的方法
  4. 把截取的视频做成Gif格式(Gifrocket)
  5. 我的周刊(第009期)
  6. 3种应用架构简单介绍
  7. 《第三次全国国土调查成果国家级核查方案》印发
  8. 探索最佳物联网全栈开发之道 | 附 PPT 下载
  9. 第三方微信支付,WAP、H5、APP、公众号支付的区别
  10. Android 学习论坛博客及网站推荐(1028日更新)