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

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

专栏内容&#xff1a;linux下并发编程个人主页&#xff1a;我的主页座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物&#xff0e;目录 前言 概述 原理介绍 接口说明 代码演示 结尾 前言 本专栏主要分享linux下并发编程…...

Redis(主从复制、哨兵模式、集群)概述及部署

目录 1.redis高可用 2.redis持久化 1.Redis 提供两种方式进行持久化&#xff1a; 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从命令行安装程序&#xff0c;及其容易。它有如下特点&#xff1a; 消除权限弹出窗口隐藏 GUI 向导样式的安装程序防止安装大量程序的 PATH 污染避免安装和卸载程序的意外副作用自动查找并安装依赖项自行执行所有额外的设…...

九龙证券|人工智能+国产软件+智慧城市概念股火了,欧洲资管巨头大举抄底

近一周组织调研个股数量有130多只&#xff0c;迈瑞医疗成为调研组织数量最多的股票。 证券时报数据宝统计&#xff0c;近一周组织调研公司数量有130多家。从调研组织类型来看&#xff0c;证券公司调研相对最广泛&#xff0c;调研80多家公司。 迈瑞医疗获超500家组织调研 迈瑞…...

Nacos下载安装与配置(windows)

一、Nacos下载 官网地址&#xff1a;home (nacos.io) 点击前往Github&#xff0c;跳转至Github下载页面。 点击Tags&#xff0c;跳转至版本选择页面&#xff0c;此处选择2.2.0版本。 点击nacos-server-2.2.0.zip&#xff0c;进行下载。 二、Nacos安装 将下载的压缩包解压至需…...

QT学习笔记(语音识别项目 )

语音识别项目 我们知道 AI 智能音箱已经在我们生活中不少见&#xff0c;也许我们都玩过&#xff0c;智能化非常高&#xff0c;功能 强大&#xff0c;与我们平常玩的那种蓝牙音箱&#xff0c;Wifi 音箱有很大的区别&#xff0c;AI 智能在哪里呢&#xff1f;语音识别技 术和云端…...

Vulnhub:DC-4靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.251 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --scripthttp-enum 192.168.111.251 访问目标网站发现需要登录 使用账号admin爆破出密码&#xff1a;happy 登陆后抓包执行反弹shell 提权 在/home/jim/backu…...

序列差分练习题--从模板到灵活运用

本篇包含6道序列差分练习题及题解&#xff0c;难度由模板到提高 语文成绩 题目背景 语文考试结束了&#xff0c;成绩还是一如既往地有问题。 题目描述 语文老师总是写错成绩&#xff0c;所以当她修改成绩的时候&#xff0c;总是累得不行。她总是要一遍遍地给某些同学增加分…...

Xshell 连接 Ubuntu 20.04

1 更改网络配置信息 修改/etc/netplan/01-network-manager-all.yaml文件信息 sudo gedit /etc/netplan/01-network-manager-all.yaml删除原有内容&#xff0c;替换为以下信息&#xff1a; 注意&#xff1a;addresses、gateway4 要根据个人虚拟机的实际情况修改 # Let Networ…...

【网口交换机:交换机KSZ9897学习-笔记-资料汇总-记录】

【网口交换机&#xff1a;交换机KSZ9897学习-笔记-资料汇总-记录】1、概述2、 自己的学习与摸索之路第一阶段&#xff1a;随意在网上查找相关资料第二阶段&#xff1a;针对性在网上资料第三阶段&#xff1a;测试并且使用开发板第四阶段&#xff1a;针对性使用工具进行测试。2、…...

linux信号量及其实例

概述 Linux信号量是用于进程间同步和互斥的一种通信机制。本质是计数器 它们通常用于控制对共享资源的访问&#xff0c;以确保只有一个进程可以同时访问该资源。以下是一个详细的教程和C语言代码示例&#xff0c;展示如何使用信号量进行进程间通信。 创建信号量 要使用信号量…...

Nomogram | 盘点一下绘制列线图的几个R包!~(一)

1写在前面 列线图&#xff0c;又称诺莫图&#xff08;Nomogram&#xff09;&#xff0c;是一种用于预测模型的可视化工具&#xff0c;它可以将多个影响因素和结局事件的关系展示在同一平面上。&#x1f973; 列线图最早是由法国工程师Philbert Maurice dOcagne于1884年发明的&a…...

两个数组的交集(力扣刷题)

给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/intersection-of-two-arrays 说…...

SonarQube 10.0 (macOS, Linux, Windows) - 清洁代码 (Clean Code)

请访问原文链接&#xff1a;https://sysin.org/blog/sonarqube-10/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Sonar Clean Code Industry leading solutions IDE | SonarLint Free IDE extension that provides on-the-f…...

怎么统一把文件名不需要部分批量替换掉

同事把文件传给我&#xff0c;我接在电脑上看发现文件名都是乱的&#xff0c;前面都加了一串挺长的数字&#xff0c;总之看起来很乱&#xff0c;顺序也跟着乱了&#xff0c;如何把红色框内部分删除掉呢&#xff1f; 上图就是我收到同事发我文件呢&#xff0c;你说要什么修改呢&…...

Vue3电商项目实战-结算支付 3【05-结算-收货地址-添加、06-结算-收货地址-修改、07-结算-提交订单】

文章目录05-结算-收货地址-添加06-结算-收货地址-修改07-结算-提交订单05-结算-收货地址-添加 目的&#xff1a;实现收货地址的添加。 大致步骤&#xff1a; 独立组件&#xff0c;准备一个对话框完成表单布局完成确认添加操作 落的代码&#xff1a; 1.独立组件&#xff0c;准…...

开心档之开发入门网-C++ 变量作用域

C 变量作用域 目录 C 变量作用域 局部变量 实例 全局变量 实例 实例 初始化局部变量和全局变量 作用域是程序的一个区域&#xff0c;一般来说有三个地方可以定义变量&#xff1a; 在函数或一个代码块内部声明的变量&#xff0c;称为局部变量。 在函数参数的定义中声明…...

蓝易云:linux怎么关闭防火墙详细教程

在Linux下关闭防火墙可以通过以下步骤实现&#xff1a; 1. 检查防火墙状态 首先需要检查当前系统的防火墙状态&#xff0c;可以使用以下命令&#xff1a; sudo systemctl status firewalld 如果防火墙当前正在运行&#xff0c;会显示出如下信息&#xff1a; ● firewalld.s…...

操作系统-用户进程

一、Makefile 这个 Makefile 要比之前的文件夹中的 Makefile 更加复杂&#xff0c;是因为之前的文件夹都是对操作系统特定部分的一个编译指导&#xff0c;所以基本上是实现的功能就是“对应的 C 文件和汇编文件编译成目标文件”这一个功能&#xff0c;最后合成一个整体。但是 …...

小驰私房菜_07_camx EIS使能

#小驰私房菜# #Qcom Cax# 本篇文章分下面几点展开: 1) camxoverridesettings.txt 中如何设置打开eis开关? 2)app打开eis,需要设置哪些request? 3) eisv2.0、eisv3.0分别是什么时候采用? 4)相关日志分析,日志上如何确认eis已经使能? 一、 camxoverridesettings.txt …...

DXVK性能优化:让老旧系统重获新生的完美方案

DXVK性能优化&#xff1a;让老旧系统重获新生的完美方案 【免费下载链接】dxvk Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk 为什么老旧电脑运行新程序总是卡顿&#xff1f;DXVK如何解决…...

CentOS7 下 Go 多版本管理与无缝升级指南

1. 为什么需要Go多版本管理&#xff1f; 在CentOS7系统上开发Go项目时&#xff0c;经常会遇到这样的尴尬&#xff1a;新项目需要用最新版Go的特性&#xff0c;而老项目必须跑在特定旧版本上才能兼容。我去年就踩过这个坑——用Go 1.21写完的微服务&#xff0c;部署到生产环境发…...

s2-pro快速上手指南:3步完成文本转语音与音色迁移实操手册

s2-pro快速上手指南&#xff1a;3步完成文本转语音与音色迁移实操手册 1. 平台简介 s2-pro是Fish Audio开源的专业级语音合成模型镜像&#xff0c;它能够将文本内容转换为自然流畅的语音&#xff0c;并支持通过参考音频实现音色迁移功能。这意味着你可以上传一段参考音频&…...

PLCopen运动控制功能块实战:从单轴控制到多轴联动的5个经典案例解析

PLCopen运动控制功能块实战&#xff1a;从单轴控制到多轴联动的5个经典案例解析 在工业自动化领域&#xff0c;精确的运动控制是实现高效生产的关键。无论是简单的传送带定位&#xff0c;还是复杂的多轴协同作业&#xff0c;PLCopen规范提供的标准化功能块都能为工程师提供强大…...

避坑指南:UR5e机器人SpeedL模式下的笛卡尔空间控制,如何避免奇异点和超限?

UR5e机器人SpeedL模式避坑实战&#xff1a;笛卡尔空间控制的三大安全策略 实验室里&#xff0c;机械臂突然发出刺耳的警报声——这可能是每个UR5e初学者都经历过的噩梦。当你在笛卡尔空间用SpeedL指令控制机器人画复杂轨迹时&#xff0c;关节超限、奇异点问题和自碰撞就像三个隐…...

从零到精通:Human Resource Machine 全关卡高效解法与思维跃迁指南

1. 为什么《Human Resource Machine》是程序员的最佳思维训练场 第一次打开《Human Resource Machine》时&#xff0c;我以为这不过是个披着编程外衣的小游戏。但当我卡在"第三年"的关卡整整一个下午后&#xff0c;才意识到这可能是最接近真实编程思维的训练场。这款…...

遇到“用户对AIAgent进行提示词注入”怎么办?

文章目录先理解什么是“提示词注入”图片里的防护方法&#xff08;两层&#xff09;第一层&#xff1a;System Prompt 先贴“封条”第二层&#xff1a;输出端再加“安检门”总结先理解什么是“提示词注入” 你可以把 Agent&#xff08;智能助手&#xff09; 想象成一个 严格遵…...

日志分散难管理?用Visual Syslog Server实现企业级日志集中监控的5个实战方案

日志分散难管理&#xff1f;用Visual Syslog Server实现企业级日志集中监控的5个实战方案 【免费下载链接】visualsyslog Syslog Server for Windows with a graphical user interface 项目地址: https://gitcode.com/gh_mirrors/vi/visualsyslog 痛点诊断&#xff1a;日…...

实战指南:在Kali Linux上构建HexStrike AI与Trae MCP的智能安全联动平台

1. 环境准备与基础配置 在Kali Linux上构建HexStrike AI与Trae MCP的智能安全联动平台&#xff0c;首先需要确保基础环境配置正确。我建议使用物理机直接安装Kali Linux&#xff0c;相比虚拟机方案能获得更好的性能表现&#xff0c;特别是在处理大规模安全扫描任务时。如果确实…...

从零搭建SRS流媒体服务器:实现RTMP推拉流的实战部署指南

1. 为什么选择SRS搭建流媒体服务器&#xff1f; 最近几年直播和实时视频的需求爆发式增长&#xff0c;很多开发者都在寻找轻量高效的流媒体服务器方案。我测试过不少开源方案&#xff0c;最终发现SRS&#xff08;Simple Realtime Server&#xff09;是最适合个人和小团队自建的…...