学习笔记(linux高级编程)10

IPC   进程间通信  interprocess communicate

    三大类:

1、古老的通信方式

         无名管道  有名管道  信号

2、IPC对象通信 system v    BSD     suse fedora   kernel.org

         消息队列(用的相对少,这里不讨论)

         共享内存

         信号量集

3、socket通信

         网络通信

特列:古老的通信方式中信号是唯一的异步通信

      所有的通信方式中共享内存是唯一的最高效

管道==》无名管道、有名管道

    无名管道 ===》pipe ==》只能给有亲缘关系进程通信

    有名管道 ===》fifo ==》可以给任意单机进程通信

管道的特性:

    1、管道是 半双工的工作模式(不能同时收发)

    2、所有的管道都是特殊的文件不支持定位操作。lseek->> fd  fseek ->>FILE*


    3、管道是特殊文件,读写使用文件IO。fgets,fread,fgetc,

注意:

1,读端存在,一直向管道中去写,超过64k,写会阻塞。

    2,写端是存在的,读管道,如果管道为空的话,读会阻塞。

    3.管道破裂,,读端关闭,写管道。

    4. read 0 ,写端关闭,如果管道没有内容,read 0 ;

使用框架:

    创建管道 ==》读写管道 ==》关闭管道

1、无名管道 ===》管道的特例 ===>pipe函数

    特性:

    1.1  亲缘关系进程使用

    1.2  有固定的读写端

    流程:

    创建并打开管道: pipe函数

#include <unistd.h>

int pipe(int pipefd[2]);

功能:创建并打开一个无名管道

参数:pipefd[0] ==>无名管道的固定读端

      pipefd[1] ==>无名管道的固定写端

返回值:成功 0

         失败 -1;

注意事项:

    1、无名管道的架设应该在fork之前进行。

无名管道的读写:===》文件IO的读写方式。

    读: read()

    写: write()

关闭管道: close();

验证如下问题:

1、父子进程是否都有fd[0] fd[1],

   如果在单一进程中写fd[1]能否直接从fd[0]中读到。

   可以,写fd[1]可以从fd[0]读

2、管道的数据存储方式是什么样的

   数据是否一直保留?

    栈, 先进后出

   队列形式存储 读数据会剪切取走数据不会保留

   先进先出

3、管道的数据容量是多少,有没有上限值。

    操作系统的建议值: 512* 8 = 4k

    代码测试实际值:   65536byte= 64k

4、管道的同步效果如何验证?读写同步验证。

    读端关闭能不能写? 不可以 ===>SIGPIPE 异常终止

    写端关闭能不能读? 可以,取决于pipe有没有内容,===>read返回值为0 不阻塞

    结论:读写端必须同时存在,才能进行

           管道的读写。

5、固定的读写端是否就不能互换?

    能否写fd[0] 能否读fd[1]?   不可以,是固定读写端。

有名管道===》fifo ==》有文件名称的管道。

                        文件系统中可见

框架:

    创建有名管道 ==》打开有名管道 ==》读写管道

    ==》关闭管道  ==》卸载有名管

1、创建:mkfifo

#include <sys/types.h>

#include <sys/stat.h>

 remove();

int mkfifo(const char *pathname, mode_t mode);

功能:在指定的pathname路径+名称下创建一个权限为

      mode的有名管道文件。

参数:pathname要创建的有名管道路径+名称

      mode  8进制文件权限。

返回值:成功 0

         失败  -1;

2、打开有名管道 open

    注意:该函数使用的时候要注意打开方式,

    因为管道是半双工模式,所有打开方式直接决定

    当前进程的读写方式。

    一般只有如下方式:

    int fd-read = open("./fifo",O_RDONLY); ==>fd 是固定读端

    int fd-write = open("./fifo",O_WRONLY); ==>fd 是固定写端

    不能是 O_RDWR 方式打开文件。

    不能有 O_CREAT 选项,因为创建管道有指定的mkfifo函数

3、管道的读写: 文件IO

    读: read(fd-read,buff,sizeof(buff));

    写: write(fd-write,buff,sizeof(buff));

4、关闭管道:

         close(fd)

5、卸载管道:remove();

         int unlink(const char *pathname);

         功能:将指定的pathname管道文件卸载,同时

               从文件系统中删除。

         参数: ptahtname 要卸载的有名管道

         返回值:成功 0

                  失败  -1;

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

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

相关文章

Qt | Qt6.5.3创建一个安卓APP并发布到真机

01、重点知识公布 【1】Qt | windows Qt6.5.3安装&安卓环境搭建&虚拟机调试和真机调试完美版(保姆级教程)VS2022 配置Qt编译环境 | winows安装Qt5.14.2 | VS2017和Qt5配置成功指南

TF/IDF算法

第1关&#xff1a;去除停用词 任务描述 本关任务&#xff1a;根据本关所学有关停用词的知识&#xff0c;编写使用停用词表去除停用词的程序并通过测试用例。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 停用词的意义&#xff1b; 去除停用词的步骤。 …

手机注册卡知多少

顾名思义&#xff0c;手机注册卡也是一种手机卡&#xff0c;只是这种手机卡没有套餐&#xff0c;没有流量&#xff0c;只能用来接收短信。 因为只能接收短信&#xff0c;所以大家可以用来注册各种APP和会员账户&#xff0c;一方面进行薅羊毛&#xff0c;另一方面可以进行自媒体…

浅谈Web性能测试(原创)

一、性能测试不是什么高技术的活&#xff1a; 说到性能测试&#xff0c;很多工作时间较短的新同事或者应届生就很害怕。 为什么害怕&#xff0c;因为感觉无从下手&#xff0c;不知道该做什么、怎么做、做到什么程度&#xff1f; 一听性能测试首先想到的是各种专业的性能测试…

ThingsKit物联网平台功能解析

随着物联网技术的飞速发展&#xff0c;各种物联网平台应运而生&#xff0c;为设备管理和数据集成提供了强大的支持。ThingsKit物联网平台以其全面的功能和灵活的配置&#xff0c;成为行业中的一大亮点。本文将详细解析ThingsKit物联网平台的功能清单&#xff0c;带您深入了解该…

「前端工具」postman接口测试工具详解

Postman 是一款流行的 API 开发工具,用于构建和测试 RESTful API。以下是 Postman 的一些关键特性和使用方法的详解: 1. 界面和基本操作 工作区:Postman 的主界面,用于显示集合、环境和全局变量。请求构建器:用于输入请求的 URL、HTTP 方法、请求头、请求体等。响应区:显…

Java面试题:覆盖索引和超大分页优化

覆盖索引和超大分页优化 覆盖索引 覆盖索引:查询使用了索引,且需要返回的列在索引中全部能找到 根据主键查询的sql语句必然是覆盖索引: 主键为聚集索引,索引中包含所有数据 非聚集索引中包含主键,所以查询二级索引和对应主键的查询语句也是覆盖索引 非覆盖索引:需要回表查…

oracle数据库默认表空间详解

文章目录 oracle数据库默认表空间列表 oracle数据库默认表空间列表 系统表空间&#xff08;System Tablespace&#xff09; 系统表空间包含了系统级别的元数据&#xff0c;如数据字典、系统表和存储过程等。例如SYSTEM表空间用于保存数据库的数据字典、PL/SQL程序的源代码和解释…

【C语言】分支(选择)和循环语句

目录 简述选择语句简述if语句单if结构语法格式 if-else结构语法结构 语法结构 循环结构break和continuewhile循环语法结构 for循环语法结构 do while循环语法结构 简述 在c语言中分支和循环语句是极其重要的&#xff0c;就像生活中你难免要做一些判断和循环往复做一些事。 选…

高薪程序员必修课-java并发编程的bug源头

前言 Java并发编程虽然强大&#xff0c;但也容易引发复杂的bug。并发编程的bug主要源自以下几个方面&#xff1a;竞态条件、死锁、内存可见性问题和线程饥饿。了解这些bug的源头及其原理&#xff0c;可以帮助开发者避免和解决这些问题。以下是详细的讲解和相应的示例。 1. 竞态…

SpringBoot 中的参数校验:构建健壮应用的基石

前言 在开发Web应用时&#xff0c;处理用户输入是不可避免的一环。然而&#xff0c;用户输入往往充满不确定性&#xff0c;可能是格式不正确、类型不匹配&#xff0c;甚至包含恶意内容。为了确保应用的稳定性和安全性&#xff0c;对输入参数进行有效校验显得尤为重要。Spring …

【触想智能】工业平板电脑在新能源领域上的应用分析

工业平板电脑是一种具有高性能和稳定性的计算机设备&#xff0c;适用于在恶劣环境下进行数据采集、运营管理和现场操作。 随着新能源技术的快速发展&#xff0c;工业平板电脑不断地得到应用&#xff0c;并且已成为新能源领域中的重要工具之一。本文将从四个方面探讨工业平板电脑…

第32讲:K8S集群与Cephfs文件系统集成

文章目录 1.在K8S环境下RBD与Cephfs的使用对比2.Cephfs环境介绍3.在Ceph集群中为K8S创建单独Cephfs文件系统和认证用户3.1.创建一个K8S使用的Cephfs文件系统3.2.将创建的Cephfs文件系统挂载到本地路径3.3.创建K8S连接Ceph集群使用的认证用户 4.K8S PV存储卷使用Cephfs文件系统4…

WSO2 products 文件上传漏洞(CVE-2022-29464)

前言 CVE-2022-29464 是一个影响多个 WSO2 产品的严重远程代码执行&#xff08;RCE&#xff09;漏洞。这些产品包括 WSO2 API Manager、WSO2 Identity Server 和 WSO2 Enterprise Integrator 等。由于用户输入验证不当&#xff0c;该漏洞允许未经身份验证的攻击者在服务器上上…

代码随想录算法训练营第九天|151.翻转字符串里的单词、右旋字符串、28. 实现 strStr()、459.重复的子字符串

打卡Day9 1.151.翻转字符串里的单词2.右旋字符串3.28. 实现 strStr()4.459.重复的子字符串 1.151.翻转字符串里的单词 题目链接&#xff1a;翻转字符串里的单词 文档讲解&#xff1a; 代码随想录 思路&#xff1a;首先&#xff0c;移除多余的空格&#xff1b;然后&#xff0c…

TensorRT学习(二)TensorRT使用教程(Python版)

本文适合快速了解TensorRT使用的整体流程,具体细节还是建议参考TensorRT的官方文档。 加速原理: 加速原理比较复杂,它将会根据显卡来优化算子,以起到加速作用(如下图所示)。简单的来说,就是类似于你出一个公式1+1+1,而你的显卡支持乘法,直接给你把这个公式优化成了1*…

论文调研_物联网漏洞检测综述

A Review of IoT Firmware Vulnerabilities and Auditing Techniques 研究背景&#xff1a;物联网设备在工业、消费类等各个领域得到了广泛应用&#xff0c;实现了更高的自动化和生产率。然而&#xff0c;这些连网设备的高度依赖也带来了一系列网络安全威胁&#xff0c;特别是…

生成式AI赋能金融信贷:减少信用评分偏差

信用评分在确定谁获得信贷以及以何种条件获得信贷方面发挥着关键作用。然而&#xff0c;尽管这一点很重要&#xff0c;但传统的信用评分系统长期以来一直受到一系列关键问题的困扰——从偏见和歧视&#xff0c;到有限的数据考虑和可扩展性挑战。例如&#xff0c;一项针对美国贷…

【代码随想录】【算法训练营】【第56天】 [卡码98]所有可达路径

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 56&#xff0c;周二&#xff0c;继续ding~ 题目详情 [卡码98] 所有可达路径 题目描述 卡码98 所有可达路径 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言…