1. FIFO通信(first in first out)
    FIFO 有名管道,实现无血缘关系进程通信。
    ----创建一个管道的伪文件
    a.mkfifo testfifo 命令创建
    b.也可以使用函数int mkfifo(const char *pathname, mode_t mode);
    ----内核会针对fifo文件开辟一个缓冲区,操作fifo文件,可以操作缓冲区,实现进程间通信–实际上就是文件读写
    man 3 mkfifo
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);

注意事项:
FIFOs
Opening the read or write end of a FIFO blocks until the other end is also opened (by another process or thread). See
fifo(7) for further details.
打开fifo文件时候,read端会阻塞等待write端open,write端同理,也会阻塞等待另外一段打开。

代码示例:
file_w.c 写端

#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>int main(int argc, char *argv[]) {if(argc != 2) {printf("./a.out filename1\n");return -1;}printf("begin open w\n");int o_ret = open(argv[1], O_WRONLY);printf("end open w\n");char buf[256];int num = 0;while (1) {memset(buf, '\0', sizeof(buf));sprintf(buf, "xiaoming--%d", num++);printf("strlen(buf) = %d\n", strlen(buf));write(o_ret, buf, strlen(buf));sleep(1);}close(o_ret);return 0;
}

file_r.c 读端

#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>int main(int argc, char *argv[]) {if(argc != 2) {printf("./a.out filename1\n");return -1;}printf("begin open r\n");int o_ret = open(argv[1], O_RDONLY);printf("end open r\n");char buf[256];int num = 0;while (1) {memset(buf, '\0', sizeof(buf));read(o_ret, buf, sizeof(buf));printf("strlen(buf) = %d\n", strlen(buf));printf("read is%s\n", buf);}close(o_ret);return 0;
}

Linux 进程通信之FIFO相关推荐

  1. Linux 进程通信fifo,Linux 进程通信之FIFO的实现

    FIFO通信(first in first out) FIFO 有名管道,实现无血缘关系进程通信. 创建一个管道的伪文件 a.mkfifo testfifo 命令创建 b.也可以使用函数int mkf ...

  2. linux进程管道通信缺点,Linux进程通信(IPC)的方式详解

    前言:Linux进程通信的方式 什么是进程通信?进程通信是指进程之间交换信息 进程通信方式共有6种: 管道(pipe),包括流管道(s_pipe)和有名管道(named pipe) 信号(signal ...

  3. Linux进程通信——匿名管道、命名管道、管道的特性和共享内存

    Linux进程通信--匿名管道.命名管道.管道的特性和共享内存 一.管道 1.1 什么是管道? 1.2 匿名管道 <1> 匿名管道参数说明 <2> fork共享管道原理 < ...

  4. Linux进程通信的四种方式——共享内存、信号量、无名管道、消息队列|实验、代码、分析、总结

    Linux进程通信的四种方式--共享内存.信号量.无名管道.消息队列|实验.代码.分析.总结 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须 ...

  5. Linux进程通信的试验

    1.实验目的 1.1了解Linux进程通信的概念. 1.2 掌握Linux进程通信的常用方法. 2.实验内容 创建admin用户,密码也是admin. 用admin登陆后,创建src目录,所有的源代码 ...

  6. 【操作系统实验】Linux进程通信—共享内存通信、管道通信

    Linux进程通信-共享内存通信.管道通信 一.实验目的: 二.实验题目: 1. 试设计程序利用共享内存完成如下进程通信 1.shmget函数 2.shmat函数 3.shmdt函数 4.shmctl ...

  7. linux一个进程通知另外一个进程,Linux进程通信学习笔记

    一.为什么需要进程通信 1)数据传输 一个进程需要把它的数据发送给另一个进程. 2)资源共享 多个进程之间共享同样的资源. 3)通知事件 一个进程向另外一个进程发送消息,通知它发生了某事件. 4)进程 ...

  8. linux进程通信发送方式,Linux服务器编程——Linux系统编程之进程通信

    进程通信又称IPC IPC方法 方法:管道(最简单) 信号(开销最小) 共享映射区/共享内存(无血缘关系) 本地套接字(最稳定) Linux文件类型: -   文件 d  目录 l   符号链接 s  ...

  9. linux 进程通信机制,LINUX内核进程高效通信机制研究

    摘要:进程间的通信是多任务.多用户操作系统必须考虑的重大问题,Linux继承了Unix的基本设计思想,其安全性和稳定性得到了人们的认可,但随着其应用领域的不断拓展,其通信机制已经不能满足用户的需求.本 ...

最新文章

  1. JavaScript专题之从零实现jQuery的extend
  2. 年度旗舰机广告片遭电视台泄露 三星:我有句话不知当讲不当讲
  3. 如何使用 Python 构建一个“谷歌搜索”系统? | 内附代码
  4. 计算机无法搜索照片,电脑上照片查看器无法打开照片
  5. WPS 国际版 Remove ads
  6. 河南增值税开票系统原服务器地址,河南省增值税发票综合服务平台登录入口:https://fpdk.henan.chinatax.gov.cn...
  7. 人工神经网络——神经元模型介绍
  8. 增量式光电编码器原理及其结构
  9. 网络营销渠道有什么特点?
  10. 阿里云oss出现Unable to execute HTTP request: bucket.二级域名.域名: nodename nor servname provided, or not known
  11. META-INF、WEB-INF分别是什么?
  12. java jlist 添加滚动条_JList滚动条问题
  13. leet-code Z 字形变换详解
  14. (Java实现) 洛谷 P1200 你的飞碟在这儿
  15. Electron 打包Mac安装包代码签名问题解决方案
  16. 2022-2028全球与中国移动网页浏览器市场现状及未来发展趋势
  17. HTML超出文本显示省略号...[text-overflow]
  18. KiTTY及cnKiTTY配置文件kitty.ini的简单中文注释
  19. java .vm_java VM
  20. 关于合成孔径声纳技术一点感想

热门文章

  1. vue slot的使用
  2. Jira filter subscribe issues
  3. 揭开Python科学计算的面纱
  4. Casperjs中fill提交表单遇到的问题
  5. 远程工作时的协作工具
  6. Constructor总结
  7. HDU4405 期望
  8. python文件的读取与写入_python中文件的读取与写入以及os模块
  9. 高校c语言题库,C语言-中国大学mooc-题库零氪
  10. 关闭运动轨迹_网球初学者如何正确入门网球运动,有哪些学习细节