当前位置: 首页 > news >正文

Linux--进程间通讯--FIFO(open打开)

1. 什么是FIFO
FIFO命名管道,也叫有名管道,来区分管道pipe。管道pipe只能用于有血缘关系的进程间通信,但通过FIFO可以实现不相关的进程之间交换数据。FIFO是Linux基础文件类型中的一种,但是FIFO文件在磁盘上没有数据块,仅仅用来标识内核中的一条通道。各进程可以打开这个文件进行read/write操作,实际上是在读写内核通道,这样就实现了进程间通信。

创建FIFO的方式:

使用命令创建:mkfifo 管道名,可以理解为创建一个管道伪文件。
使用库函数创建:mkfifo()函数,并且一旦使用mkfifo()创建了一个FIFO,就可以使用open来打开它,常见的文件I/O函数都可用于FIFO。如:close、read、write、unlink等。
实际上,创建一个FIFO命名管道的时候,内核会为FIFO(伪)文件开辟一个缓冲区,操作FIFO文件就相当于操作这个缓冲区,以此来实现进程间的通信,这种通信实际上就是文件读写的操作来实现的。(可以把FIFO理解为一个文件,一个进程向该文件写数据,另一个进程从该文件中读书数据,前提是两个进程读写的是同一个FIFO文件才能实现通信)

2.当open一个FIFO时,是否设置非阻塞标志(O_NONBLOCK)的区别:

        若没有执行O_NONBLOCK(默认),只读open要阻塞到某个其他进程为写而打开此FIFO。类似的,只写open要阻塞到其他进程为读而打开它。

        若指定了O_NONBLOCK,则只读open立即返回。而只写open将出错返回-1,如果没有进程已经为读而打开该FIFO,其errno置ENXIO。
 

3.代码:

创建两个进程,一个进程向FIFO数据,一个进程从FIFO数据。

write:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>//       int mkfifo(const char *pathname, mode_t mode);
//   ssize_t write(int fd, const void *buf, size_t count);int main()
{int cnt = 0;char *str = "message from fifo";int fd = open("./ipc-file",O_WRONLY);printf("write open success\n");while(1){write(fd,str,strlen(str));sleep(2);cnt++;if(cnt == 5){break;}}close(fd);return 0;}

read:

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>//       int mkfifo(const char *pathname, mode_t mode);int main()
{int cnt = 0;char buf[30]={0};	if(mkfifo("./ipc-file",0700)==-1 && errno != EEXIST){printf("mkfifo fail");perror("why");}	int fd = open("./ipc-file",O_RDONLY);printf("open success\n");while(1){int nread = read(fd,buf,30);printf("read %d byte from fifo/n,context :%s\n",nread,buf);cnt++;if(cnt == 3){break;}}close(fd);return 0;}

结果:

相关文章:

Linux--进程间通讯--FIFO(open打开)

1. 什么是FIFO FIFO命名管道&#xff0c;也叫有名管道&#xff0c;来区分管道pipe。管道pipe只能用于有血缘关系的进程间通信&#xff0c;但通过FIFO可以实现不相关的进程之间交换数据。FIFO是Linux基础文件类型中的一种&#xff0c;但是FIFO文件在磁盘上没有数据块&#xff0c…...

哪里可以了解轻量的工作流引擎?

如果想要实现高效率的办公&#xff0c;可以使用轻量的工作流引擎低代码技术平台。随着工作量日益繁重起来&#xff0c;传统的办公制作方式已经无法满足现实需要的&#xff0c;采用轻量级的表格制作工具&#xff0c;就能在无形中缓解办公压力&#xff0c;创造更高效、灵活、优质…...

lvs负载均衡、LVS集群部署

四&#xff1a;LVS集群部署 lvs给nginx做负载均衡项目 218lvs&#xff08;DR 负载均衡器&#xff09; yum -y install ipvsadm&#xff08;安装这个工具来管理lvs&#xff09; 设置VIP192.168.142.120 创建ipvsadm的文件用来存放lvs的规则 定义策略 ipvsadm -C //清空现有…...

如何应对核心员工提离职?

最近一年互联网行情不好&#xff0c;很多大厂都在裁员&#xff0c;但裁员并不是不要人做事了。原来你这个岗位10个人做&#xff0c;企业有钱赚养得起&#xff0c;现在企业不怎么赚钱了&#xff0c;只能养4个人了。那么会有六个被裁掉。这时候对企业价值最大的4个人会被留下。也…...

建站系列(八)--- 本地开发环境搭建(WNMP)

目录 相关系列文章前言一、准备工作二、Nginx安装三、MySQL安装四、PHP安装及Nginx配置五、总结 相关系列文章 建站系列&#xff08;一&#xff09;— 网站基本常识 建站系列&#xff08;二&#xff09;— 域名、IP地址、URL、端口详解 建站系列&#xff08;三&#xff09;— …...

21天学会C++:Day8----范围for与nullptr

目录 ​编辑 1. 范围for 2. nullptr 1. 范围for 我们在写C语言循环遍历代码的时候&#xff0c;无论是用 for循环&#xff0c;while循环都需要考虑循环的起始条件&#xff0c;循环变量的递增逻辑&#xff0c;循环的结束条件。麻烦不说还可能会出错。 int main() {int arr[]…...

Linux——环境变量

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——环境变量 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;环境变量(environment variables)一般是指在操作系统中用来指定操作…...

Screen的详细全面安装教程及Screen的用法

Screen可以大大提高终端使用效率&#xff0c;是Linux系统管理和运维的必备技能。当我们开启Screen后&#xff0c;只要Screen进程没有终止&#xff0c;其内部运行的会话都可以恢复。即使网络连接中断&#xff0c;用户也可以重新进入已开启的Screen中&#xff0c;对中断的会话进行…...

生成树、Prufer序列的计数问题:0912T1

看到生成树计数&#xff0c;很容易想到生成树计数 然后发现每个点有度数限制&#xff0c;我们可以先考虑枚举每个点的度数&#xff08;也可以是Prufer 序列中的出现次数&#xff09; 假设出现次数为 a a a&#xff0c;可以得出其生成树方案为 n ! ∏ ( a i − 1 ) ! \frac{…...

SQL_牛客网_SQL264_求每个登陆日期的次日留存率

牛客每个人最近的登录日期(五) 牛客每天有很多人登录&#xff0c;请你统计一下牛客每个日期新用户的次日留存率。 有一个登录(login)记录表&#xff0c;简况如下: id user_id client_id date 1 2 1 2020-10-12 2 3 2 2020-10-12 3 1 2 2020-10-…...

Hive 基础知识

目录 1.基础概念1.1 定义1.2 组件1.3 元数据1.4 内部表和外部表 2. Hive与关系型数据库的对比3. Hive 数据存储4. 参考文献 1.基础概念 1.1 定义 Hive是一个基于Hadoop的数据仓库基础设施工具&#xff0c;它可以将结构化的数据文件映射为一张数据库表&#xff0c;并提供类SQL查…...

【数据结构】树的基础知识及三种存储结构

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …...

ABB 3BHB003688R0101接口模块

通信接口&#xff1a;接口模块通常具有多种通信接口&#xff0c;如以太网、串行通信、Modbus、Profibus等&#xff0c;以便与其他设备和系统进行数据交换。 协议支持&#xff1a;它们支持各种通信协议&#xff0c;确保与不同制造商的设备和控制系统兼容。 数据转换和适配&…...

精简 jre 涉坑记录

主要参考&#xff1a;https://zhuanlan.zhihu.com/p/91496457 主要问题&#xff1a; 1&#xff09;jre 中有 client 和 server 之分。参考&#xff1a;关于JDK的Server和Client模式的切换_jacksonary的博客-CSDN博客 2&#xff09;对 copy 出来的 rt 进行打 zip 包时&#x…...

Java程序员学习算法路线规划总结

文章目录 前言&#xff1a;必须清楚得基本数据结构&#xff1a;1.需掌握哪些算法&#xff1f;2.学习步骤以及路线 前言&#xff1a;必须清楚得基本数据结构&#xff1a; 数组&#xff08;Array&#xff09; 链表&#xff08;Linked List&#xff09; 栈&#xff08;Stack&…...

火山引擎 ByteHouse:两个关键技术,揭秘 OLAP 引擎中的数据导入技术

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 数据导入是衡量 OLAP 引擎性能及易用性的重要标准之一&#xff0c;高效的数据导入能力能够加速数据实时处理和分析的效率。 作为一款 OLAP 引擎&#xff0c;火山引…...

深挖“范围经济”穿越产业周期:TCL电子持续繁荣的密码

作者 | 曾响铃 文 | 响铃说 1878年&#xff0c;爱迪生创立了爱迪生电灯公司&#xff0c;14年后&#xff0c;摩根将该公司与另外两家合并成通用电气公司&#xff08;GE&#xff09;。 从一个小小的碳丝直流电灯泡开始&#xff0c;历经数次改弦更张&#xff0c;穿越两次世界大…...

Elasticsearch:使用 ESRE 和生成式 AI 了解 TLS 日志错误

作者&#xff1a;DAVID HOPE 本博客介绍了 Elasticsearch 相关性引擎 (ESRE​​) 及其 Elastic Learned Sparse Encoder 功能的新颖应用&#xff0c;特别是在日志分析中。 最近发布的 Elasticsearch Relevance Engine™ (ESRE™) 包含一系列重要功能&#xff0c;可增强搜索能力…...

Swing程序设计(3)JDialog窗体

文章目录 前言一、JDialog窗体的介绍二、JDialog窗体的使用 1.JDialog的常用构造方法2.实例展示及分析总结 前言 JDialog窗体是窗体中的另一种类型的窗体&#xff0c;指对话框窗体。与JFrame窗体类似&#xff0c;绝大部分对于JFrame窗体使用的方法&#xff0c;对于JDialog窗体也…...

类和对象(1)

文章目录 1.面向过程和面向对象初步认识2.类的引入3.类的定义4.类的访问限定符和封装4.1访问限定符4.2封装 5.类的作用域6.类的实例化6.2结构体内存对齐规则 7.this指针7.2this指针的特性 封装&#xff08;补充&#xff09; 1.面向过程和面向对象初步认识 C面向对象但不纯面向…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...