linux 命名管道 mkfifo
- 专栏内容:linux下并发编程
- 个人主页:我的主页
- 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.
目录
前言
概述
原理介绍
接口说明
代码演示
结尾
前言
本专栏主要分享linux下并发编程相关知识,包括多进程,多线程,进程/线程间通信,并发同步控制,以及高并发下性能提升,请大家多多留言。
概述
在不同进程和程序间如何传递少量数据,且能阻塞形式使用,这就用到了管道。管道分为两种,无名管道和命名管道,因为子进程可以复制父进程的进程上下文,所以无名管道用在父子进程间,而命名管道在不同进程间通过路径名进行共享,更加通用。
原理介绍
命名管道是一种在进程间进行通信的机制,它可以用于在两个进程间进行数据传输。具体来说,命名管道是一种特殊类型的文件,它可以在不同的进程中被打开和读写,从而实现了进程间的通信。一般情况下,在Linux系统中,命名管道的创建和使用是通过C语言的相关API实现的。
建立管道文件后,可以在路径下看到,它的文件类型为 p ,说明它是管道文件。管道文件不同于一般文件的是,写时会阻塞,至到数据被读出,而在读时无数据的话会阻塞等待,直到有数据被写入。
通过系统命令也可以创建命名管道,如下:
[senllang@localhost pipetest]$ mkfifo /tmp/myfilo
[senllang@localhost pipetest]$ ll /tmp/
total 0
prw-r--r--. 1 senllang develops 0 Apr 8 15:52 myfilo
可以看到管道文件的类型为 p,我们打开两个终端进行读写测试。
终端一写入
[senllang@localhost pipetest]$ echo "hello" > /tmp/myfifo
因为没有读,此时会卡住
终端二读取
[senllang@localhost ~]$ cat /tmp/myfifo
hello
可以看到读出了hello,此时终端一也会解除阻塞。同样先读取也会阻塞,直到写入数据为至。
接口说明
(1)管道文件创建
#include <sys/types.h>#include <sys/stat.h>int mkfifo(const char *pathname, mode_t mode);
通过传递路径pathname和mode权限来创建管道文件。
#include <fcntl.h> /* Definition of AT_* constants */#include <sys/stat.h>int mkfifoat(int dirfd, const char *pathname, mode_t mode);
这是另一个版本,当pathname是相对路径时,创建路径是在dirfd指定的目录下。当dirfd为 AT_FDCWD时,用mkfifo效果一样。
(2)管道文件打开/读写/关闭
常用的文件操作 open/read/write/close
(3)删除管道文件
unlink(fd)
在用完管道时,需要删除管道文件,和删除文件类似。
代码演示
#include <stdio.h>
#include <ctype.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>int main()
{int fd;char *myfifo = "/tmp/myfifo";char input[256];char output[256];/* create named pipe */mkfifo(myfifo, 0666);/* open named pipe for reading */fd = open(myfifo, O_RDWR);while(1) {/* read input from named pipe */read(fd, input, 256);/* convert input to uppercase */int i;for (i = 0; input[i]; i++) {output[i] = toupper(input[i]);}/* write output to named pipe */int len = i;write(fd, output, len);}/* close named pipe */close(fd);unlink(myfifo);return 0;
}
编译后运行,管道里的字符串被程序转为大写后又写入管道。
[senllang@localhost pipetest]$ gcc mkfifo_ex01.c -o mkfifo_ex01
[senllang@localhost pipetest]$ ./mkfifo_ex01
在另一个终端写入字符串,
[senllang@localhost ~]$ echo "hello" >/tmp/myfifo
[senllang@localhost ~]$ cat /tmp/myfifo
HELLO
结尾
作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。另外有什么想要了解的内容,也可以给我发邮件,互相谈讨,定知无不言。
注:未经同意,不得转载!
相关文章:
linux 命名管道 mkfifo
专栏内容:linux下并发编程个人主页:我的主页座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.目录 前言 概述 原理介绍 接口说明 代码演示 结尾 前言 本专栏主要分享linux下并发编程…...
Redis(主从复制、哨兵模式、集群)概述及部署
目录 1.redis高可用 2.redis持久化 1.Redis 提供两种方式进行持久化: 2.RDB 持久化 3.AOF持久化 4.RDB和AOF的优缺点 5.Redis 性能管理 3.redis主从复制 1.Redis主从复制的概念 2.Redis主从复制的作用 3.Redis主从复制的搭建 4.redis哨兵模式 1.哨兵模式…...
windows下软件包安装工具之Scoop安装与使用
Scoop介绍 Scoop是Windows的命令行程序安装器。 Scoop从命令行安装程序,及其容易。它有如下特点: 消除权限弹出窗口隐藏 GUI 向导样式的安装程序防止安装大量程序的 PATH 污染避免安装和卸载程序的意外副作用自动查找并安装依赖项自行执行所有额外的设…...
九龙证券|人工智能+国产软件+智慧城市概念股火了,欧洲资管巨头大举抄底
近一周组织调研个股数量有130多只,迈瑞医疗成为调研组织数量最多的股票。 证券时报数据宝统计,近一周组织调研公司数量有130多家。从调研组织类型来看,证券公司调研相对最广泛,调研80多家公司。 迈瑞医疗获超500家组织调研 迈瑞…...
Nacos下载安装与配置(windows)
一、Nacos下载 官网地址:home (nacos.io) 点击前往Github,跳转至Github下载页面。 点击Tags,跳转至版本选择页面,此处选择2.2.0版本。 点击nacos-server-2.2.0.zip,进行下载。 二、Nacos安装 将下载的压缩包解压至需…...
QT学习笔记(语音识别项目 )
语音识别项目 我们知道 AI 智能音箱已经在我们生活中不少见,也许我们都玩过,智能化非常高,功能 强大,与我们平常玩的那种蓝牙音箱,Wifi 音箱有很大的区别,AI 智能在哪里呢?语音识别技 术和云端…...
Vulnhub:DC-4靶机
kali:192.168.111.111 靶机:192.168.111.251 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --scripthttp-enum 192.168.111.251 访问目标网站发现需要登录 使用账号admin爆破出密码:happy 登陆后抓包执行反弹shell 提权 在/home/jim/backu…...
序列差分练习题--从模板到灵活运用
本篇包含6道序列差分练习题及题解,难度由模板到提高 语文成绩 题目背景 语文考试结束了,成绩还是一如既往地有问题。 题目描述 语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。她总是要一遍遍地给某些同学增加分…...
Xshell 连接 Ubuntu 20.04
1 更改网络配置信息 修改/etc/netplan/01-network-manager-all.yaml文件信息 sudo gedit /etc/netplan/01-network-manager-all.yaml删除原有内容,替换为以下信息: 注意:addresses、gateway4 要根据个人虚拟机的实际情况修改 # Let Networ…...
【网口交换机:交换机KSZ9897学习-笔记-资料汇总-记录】
【网口交换机:交换机KSZ9897学习-笔记-资料汇总-记录】1、概述2、 自己的学习与摸索之路第一阶段:随意在网上查找相关资料第二阶段:针对性在网上资料第三阶段:测试并且使用开发板第四阶段:针对性使用工具进行测试。2、…...
linux信号量及其实例
概述 Linux信号量是用于进程间同步和互斥的一种通信机制。本质是计数器 它们通常用于控制对共享资源的访问,以确保只有一个进程可以同时访问该资源。以下是一个详细的教程和C语言代码示例,展示如何使用信号量进行进程间通信。 创建信号量 要使用信号量…...
Nomogram | 盘点一下绘制列线图的几个R包!~(一)
1写在前面 列线图,又称诺莫图(Nomogram),是一种用于预测模型的可视化工具,它可以将多个影响因素和结局事件的关系展示在同一平面上。🥳 列线图最早是由法国工程师Philbert Maurice dOcagne于1884年发明的&a…...
两个数组的交集(力扣刷题)
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/intersection-of-two-arrays 说…...
SonarQube 10.0 (macOS, Linux, Windows) - 清洁代码 (Clean Code)
请访问原文链接:https://sysin.org/blog/sonarqube-10/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Sonar Clean Code Industry leading solutions IDE | SonarLint Free IDE extension that provides on-the-f…...
怎么统一把文件名不需要部分批量替换掉
同事把文件传给我,我接在电脑上看发现文件名都是乱的,前面都加了一串挺长的数字,总之看起来很乱,顺序也跟着乱了,如何把红色框内部分删除掉呢? 上图就是我收到同事发我文件呢,你说要什么修改呢&…...
Vue3电商项目实战-结算支付 3【05-结算-收货地址-添加、06-结算-收货地址-修改、07-结算-提交订单】
文章目录05-结算-收货地址-添加06-结算-收货地址-修改07-结算-提交订单05-结算-收货地址-添加 目的:实现收货地址的添加。 大致步骤: 独立组件,准备一个对话框完成表单布局完成确认添加操作 落的代码: 1.独立组件,准…...
开心档之开发入门网-C++ 变量作用域
C 变量作用域 目录 C 变量作用域 局部变量 实例 全局变量 实例 实例 初始化局部变量和全局变量 作用域是程序的一个区域,一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量。 在函数参数的定义中声明…...
蓝易云:linux怎么关闭防火墙详细教程
在Linux下关闭防火墙可以通过以下步骤实现: 1. 检查防火墙状态 首先需要检查当前系统的防火墙状态,可以使用以下命令: sudo systemctl status firewalld 如果防火墙当前正在运行,会显示出如下信息: ● firewalld.s…...
操作系统-用户进程
一、Makefile 这个 Makefile 要比之前的文件夹中的 Makefile 更加复杂,是因为之前的文件夹都是对操作系统特定部分的一个编译指导,所以基本上是实现的功能就是“对应的 C 文件和汇编文件编译成目标文件”这一个功能,最后合成一个整体。但是 …...
小驰私房菜_07_camx EIS使能
#小驰私房菜# #Qcom Cax# 本篇文章分下面几点展开: 1) camxoverridesettings.txt 中如何设置打开eis开关? 2)app打开eis,需要设置哪些request? 3) eisv2.0、eisv3.0分别是什么时候采用? 4)相关日志分析,日志上如何确认eis已经使能? 一、 camxoverridesettings.txt …...
低成本工业机器人:开源六轴机械臂从技术原理到生态落地全指南
低成本工业机器人:开源六轴机械臂从技术原理到生态落地全指南 【免费下载链接】Faze4-Robotic-arm All files for 6 axis robot arm with cycloidal gearboxes . 项目地址: https://gitcode.com/gh_mirrors/fa/Faze4-Robotic-arm 技术原理:打破工…...
腾讯优图视觉模型应用:Youtu-VL-4B-Instruct在内容审核中的实战
腾讯优图视觉模型应用:Youtu-VL-4B-Instruct在内容审核中的实战 每天,互联网上会产生数十亿张图片和视频。对于内容平台来说,如何确保这些内容安全合规,同时控制审核成本,一直是个头疼的问题。传统的人工审核效率低、…...
VMware Unlocker:在非苹果硬件上运行macOS虚拟机的完整解决方案
VMware Unlocker:在非苹果硬件上运行macOS虚拟机的完整解决方案 【免费下载链接】unlocker 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker VMware Unlocker是一个开源工具,专门解决在非苹果硬件上使用VMware虚拟机运行macOS系统时的…...
“超节点”的纷争开始了
3月26日,在“2026中关村论坛年会”上,中科曙光发布世界首个无线缆箱式超节点scaleX40。其单节点集成40张GPU,总算力超过28PFLOPS(FP8精度),能够满足万亿参数大模型的训练与推理需求。产品采用标准19英寸箱式…...
语言清洗令:禁用for循环的第一年——软件测试从业者的专业复盘与策略革新
2025年全球编程社区发起的“语言清洗运动”,标志着软件开发范式的重大转折。这项运动的核心是禁用传统循环语句(如for、while),以推动声明式编程的普及,减少迭代错误并提升代码可读性。作为软件测试从业者,…...
终极指南:5个实用技巧解决Rainmeter开发中的内存保护异常问题
终极指南:5个实用技巧解决Rainmeter开发中的内存保护异常问题 【免费下载链接】rainmeter Desktop customization tool for Windows 项目地址: https://gitcode.com/gh_mirrors/ra/rainmeter 在Rainmeter桌面定制工具的开发过程中,内存保护异常&a…...
Jieba分词实战:5分钟搞定中文文本词频统计(附完整代码)
Jieba分词实战:5分钟搞定中文文本词频统计(附完整代码) 中文文本处理是自然语言处理(NLP)的基础环节,而分词则是中文文本处理的第一步。不同于英文等空格分隔的语言,中文文本需要专门的工具进行…...
前端拖拽交互实现:别再只会用原生拖拽了
前端拖拽交互实现:别再只会用原生拖拽了 毒舌时刻这代码写得跟网红滤镜似的——仅供参考。各位前端同行,咱们今天聊聊前端拖拽交互。别告诉我你还在用原生的HTML5拖拽API,那感觉就像在用诺基亚手机——能打电话,但体验太差。 为什…...
省市区县四级联动数据获取指南:基于高德API的geoJSON数据自动更新方案
省市区县四级联动数据获取指南:基于高德API的geoJSON数据自动更新方案 行政区划数据是地理信息系统和数据分析领域的基础要素之一。无论是制作可视化地图、进行区域统计分析,还是开发基于位置的服务应用,准确、实时的行政区划数据都至关重要。…...
突破VMware限制:在非苹果硬件上构建macOS开发环境完全指南
突破VMware限制:在非苹果硬件上构建macOS开发环境完全指南 【免费下载链接】unlocker 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 实现跨平台macOS体验:VMware Unlocker核心价值解析 当开发者需要在Windows或Linux工作站上构建m…...
