Linux进程通信:有名管道

news2024/12/29 8:28:34

有名管道:

        无名管道只能用于有亲缘关系的进程间通信

        因此提出有名管道(也叫FIFO文件),以实现无亲缘关系进程间的通信。

        不同于无名管道,有名管道FIFO文件的形式存在于文件系统,与一个路径名关联,因此无亲缘关系的进程也可以通过该路径互相通信。

有名管道特点:

(1)FIFO文件属于文件系统中的特殊文件,但其内容存放于内存;

(2)FIFO进程退出后,FIFO文件继续保留在文件系统中供后续使用;

(3)可实现无亲缘关系进程间的通信。

(1)mkfifo函数

#include<sys/types.h>
#include<sys/stat.h>

int mkfifo(const char* pathname, mode_t mode);
/*
功能:
    以mode权限创建有名管道pathname
参数:
    pathname:创建FIFO文件的路径名,相对路径、绝对路径都可。
    mode:文件的权限,与open函数的mode参数一样。
返回值:
    成功:0
    失败:若文件存在则返回-1
*/

  mkfifo示例:

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>

int main(int argc, const char* argv[]) {
    int ret = -1;

    ret = mkfifo("fifotest", 0644); // 创建权限为0644的有名管道
    if (-1 == ret) {
        perror("mkfifo");
        return 1;
    }
    printf("fifo file created.\n");
    return 0;
}

创建成功。

(2)有名管道的读写

(1)有名管道可用open打开,用read、write、close、unlink等操作,但同样不可lseek;

(2)一个以只写方式打开管道的进程会被阻塞,直到另一个进程以只读方式打开该管道;

(3)一个以只读方式打开管道的进程会被阻塞,直到另一个进程以只写方式打开该管道;

有名管道读写示例:

写管道程序:

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>

#define SIZE 128

int main(int argc, const char* argv[]) {
    int i = 0;
    int ret = -1;
    int fd = -1;
    char buf[SIZE];

    // 1. 以只写的方式打开一个管道文件
    fd = open("./fifotest", O_WRONLY);
    if (-1 == fd) {
        perror("open");
        return 1;
    }
    printf("writeonly open success.\n");

    // 2. 写管道
    while (1) {
        memset(buf, 0, SIZE);
        sprintf(buf, "hello %d", i++);
        ret = write(fd, buf, strlen(buf));
        if (ret <= 0) {
            perror("write");
            break;
        }
        printf("写入%d个字节.\n", ret);
        sleep(1);
    }

    // 3. 关闭FIFO文件
    close(fd);

    return 0;
}

读管道程序:

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>

#define SIZE 128

int main(int argc, const char* argv[]) { // 读管道

    int ret = -1;
    int fd = -1;
    char buf[SIZE];

    // 1. 以只读的方式打开一个管道文件
    fd = open("fifotest", O_RDONLY);
    if (-1 == fd) {
        perror("open");
        return 1;
    }
    printf("readonly open success.\n");

    // 2. 循环读管道
    while (1) {
        memset(buf, 0, SIZE);
        ret = read(fd, buf, SIZE);
        if (ret <= 0) {
            perror("read");
            break;
        }
        printf("读出buf:%s\n", buf);
    }

    // 3. 关闭FIFO文件
    close(fd);

    return 0;
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/454917.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【复杂网络建模】——Python可视化重要节点识别(PageRank算法)

目录 一、复杂网络建模 二、建模的算法 三、使用PageRank算法进行网络重要节点识别 1、PageRank算法 2、基于PageRank算法的ER网络重要节点识别 3、基于PageRank算法的小世界网络重要节点识别 4、基于PageRank算法的无标度网络的重要节点识别 四、ER网络、小世界网络、…

春秋云境:CVE-2022-24663(远程代码执行漏洞exp)

目录 一、题目 二、构造exp执行php 三、蚁剑连接 一、题目 介绍&#xff1a; 远程代码执行漏洞&#xff0c;任何订阅者都可以利用该漏洞发送带有“短代码”参数设置为 PHP Everywhere 的请求&#xff0c;并在站点上执行任意 PHP 代码。P.S. 存在常见用户名低权限用户弱口令 …

华为OD机试真题(Java),开元音统计(100%通过+复盘思路)

一、题目描述 相对开音节构成的结构为辅音元音(aeiou)辅音(r除外)e&#xff0c;常见的单词有bike cake&#xff0c;给定一个字符串&#xff0c;以空格为分隔符。 反转每个单词的字母&#xff0c;若单词中包含如数字等其他非字母时不进行反转&#xff0c;反转后计算其中含有相对…

苹果手机屏幕上的圆点怎么设置?(开启悬浮按钮)

案例&#xff1a;苹果手机屏幕上的圆点怎么设置&#xff1f; 【求助&#xff01;苹果手机的小圆点怎么调出来&#xff1f;就是悬浮按钮那个。】 如果您是苹果手机的用户&#xff0c;您可能会在手机屏幕上看到一个小圆点&#xff0c;它可以让您方便地进行操作。这个圆点是 Assi…

TortoiseSVN使用-合并深度介绍

文章目录 3.6 合并深度介绍 本人其他相关文章链接 3.6 合并深度介绍 Working copy(工作副本)&#xff1a;即你当前的工作目录&#xff0c;一般默认为这个选项&#xff1b;Recursively(递归)&#xff1a;即你选择的目录的版本库&#xff0c;包括了其下面的子文件&#xff0c;子文…

叶黄素的17种功效与副作用(5点使用禁忌请小心)

叶黄素&#xff08;Lutein&#xff09;及其同分异构体玉米黄质&#xff08;zeaxanthin&#xff09;和内消旋玉米黄质&#xff08;meso-zeaxanthin&#xff09;是一种聚集在人类视网膜中的黄斑色素。 它们不能在哺乳动物体内合成&#xff0c;必须从饮食中获得&#xff0c;然后分…

智能家居工厂模式整体设计框架控制设备测试

通俗理解的步骤就是链表通用模板定义&#xff08;在头文件里定义&#xff09;、链表的创建&#xff08;头插尾插&#xff0c;在.C 文件里&#xff09;、链表的初始化&#xff08;init配置管脚初始电平等&#xff09;、链表内容的读取&#xff08;指令工厂TCP服务端读取客户端发…

【芝士总结】史上最详循环结构讲解(蒟蒻也能学会)

虽然计算机可以在短时间批量处理成千上万条指令&#xff0c;但是不少问题中有许多规律性的重复操作&#xff0c;比如说计算几百个学生的平均分&#xff0c;或者对上万人的名单进行排序。仅使用顺序或者分支结构&#xff0c;对每一步操作都写出对应的语句是不可能的&#xff1b;…

如何用链表实现LRU缓存淘汰算法

链表学习 一、 缓存1.1缓存介绍1.2 缓存策略 二、链表结构2.1 单链表2.2 循环链表2.3 双向链表2.4 双向循环链表2.5 链表与数组性能对比 三、如何基于链表实现LRU缓存淘汰算法 一、 缓存 1.1缓存介绍 缓存是一种提高数据读取性能的技术&#xff0c;在硬件设计、软件开发中都有…

参数与非参数检验:理解差异并正确使用

数据科学是一个快速发展的领域&#xff0c;它在很大程度上依赖于统计技术来分析和理解复杂的数据集。这个过程的一个关键部分是假设检验&#xff0c;它有助于确定从样本中获得的结果是否可以推广到总体。 在这篇文章中&#xff0c;我们将探讨参数与非参数检验之间的区别&#…

微信小程序对接在线客服系统,对接小程序订阅消息模板,小程序订阅方法以及后端发送订阅模板消息的方法...

微信小程序想要对接独立在线客服系统&#xff0c;除了使用小程序消息推送接口外&#xff0c;还可以使用webview嵌入的形式嵌入聊天链接。 但是&#xff0c;使用webview嵌入的形式&#xff0c;当用户离开页面以后&#xff0c;就收不到客服回复的消息了 所以&#xff0c;我们需要…

HTML5 <s> 标签、HTML5 <sub> 和 <sup> 标签

HTML5 <s> 标签 定义和用法 <s> 标签定义加删除线的文本。HTML 5 中不再支持这个标签。请使用 CSS 代替。 HTML 4.01 与 HTML 5 之间的差异 在 HTML 4.01 中不赞成使用 <s> 标签。 在 HTML 5 中不支持 <s> 标签。 提示和注释 提示&#xff1a;请…

Oracle Linux 9 上基于 Docker 安装 Kubernetes 1.27 集群

Oracle Linux 9 上基于 Docker 安装 Kubernetes 1.27 集群 1. 禁用swap2. 禁用防火墙3. 将SELinux设置为permissive模式4. 添加网桥过滤及内核转发配置文件5. 加载 overlay、br_netfilter、ip_tables、iptable_filter 模块6. 安装 docker-ce7. 安装kubelet kubeadm kubectl8. 初…

【Java面试八股文】JVM篇

引言&#xff1a; 本文对多个平台的面试题进行了汇总、分类、概括、整理&#xff0c;对重点进行了标出&#xff0c;更便于阅读和记忆。 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线牛客面试题 目录 说说你了解的JVM内存模…

UE5实现建筑剖切效果

文章目录 1.实现目标2.实现过程2.1 材质参数集2.2 材质遮罩函数2.3 更新Box3.参考资料1.实现目标 基于BoxMask材质节点,在UE5中实现建筑物的剖切效果,GIF动图如下: 2.实现过程 实现原理与之前“BoxMask实现建筑生长效果”的原理相同,都是基于BoxMask材质节点实现。 具体实…

二分查找<万字详解>

目录 问题引入 二分查找的思路 二分查找的实现 左闭右闭写法 左闭右开写法 两种写法的对比 例题强化 常规的二分查找题目 猜数字大小 搜索插入位置 常规二分的变形题目 搜索二维矩阵 搜索二维矩阵 II 查找特定位置/特定数 在排序数组中查找元素的第一个和最后一…

DIN11系列 大电流输出信号隔离模块线性驱动器0~100mA/0~500mA/0~2A/0-4A

主要特性 精度、线性度误差等级&#xff1a; 0.1、0.2、0.5 级4-20mA/0-5V/0-10V 等标准信号输入0~100mA/0~500mA/0~1A/0-5A 等电流信号输出0~1V(max 5A)/0~10V/0-24V(max 5A) 等电压信号输出信号输入/信号输出 3000VDC 隔离辅助电源&#xff1a;12V、15V 或 24V 直流单电源供…

IJKPLAYER源码分析-音视频同步

前言 本文来介绍下IJKPLAYER的音视频同步策略及方法。IJKPLAYER所支持的同步策略&#xff0c;源自FFPLAY&#xff0c;因此有以下3种&#xff1a; 音视同步视频&#xff1a;这是缺省的同步策略&#xff0c;以audio为主时钟-参考时钟&#xff0c;采取video同步audio的方式&#x…

电子模块|外控集成 LED 光源 WS2812模块---硬件介绍和stm32驱动

电子模块|外控集成 LED 光源 WS2812模块 模块简介模块特点机械尺寸单线归零码通讯方式24bit 数据结构 stm32 驱动 模块简介 WS2812是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同&#xff0c;每个元件即为一个像素点。像素点内部包含了智能…

【小样本分割 2020 ICCV】PANet

文章目录 【小样本分割 2020 ICCV】PANet1. 简介2. 网络2.1 整体架构2.2 原型学习2.3 非参数度量学习2.4 原型对齐正则化 3. 代码3.1 backbone3.2 模型代码 【小样本分割 2020 ICCV】PANet 论文题目&#xff1a;PANet: Few-Shot Image Semantic Segmentation with Prototype Al…