学习笔记(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;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux登录界面

Linux登录界面 1. 起因2. 脚本3. 效果 1. 起因 某次刷抖音看到一个博主展示了一个登录页面,觉得蛮好看的.于是自己动手也写一个 2. 脚本 编写脚本/usr/local/bin/login.sh #!/bin/bash Current_timedate %Y-%m-%d %H:%M:%S Versioncat /etc/redhat-release Kernel_Version…

合作协议的网络接入协议

合作协议的网络接入协议 介绍阿里云获取网络接入协议查看合同生成新合同总结 介绍 最近在帮公司弄增值电信业务经营许可证的相关的材料&#xff0c;然后需要我提供网络接入商的网络接入协议。因为每个公司买的服务器可能都不一样&#xff0c;有的阿里云、华为云、腾讯云等还有…

币界网讯,币安准备与SEC 展开长期法律对决

刚刚&#xff0c;数字货币交易所的领头羊Binance公布了法律策略&#xff0c;未来将会采取大胆举措与美国证券交易委员会 (SEC) 展开长期法律斗争&#xff0c;彰显其对监管合规的承诺。小编认为&#xff0c;Binance的这一战略立场是向美国SEC传递的道歉信&#xff0c;自从美国SE…

【0299】Postgres内核之哈希表(Hash Tables)

0. 哈希表(Hash Tables) 哈希表是 一种用于存储键值对的数据结构。与使用索引号访问元素的基本数组不同,哈希表使用键来查找表条目。这使得数据管理对于用户来说更易于管理,因为按属性对数据条目进行分类比按它们在一个巨大的列表中的数量更容易。 在 C++ 中,我们将哈希…

MySQL自学教程:1. MySQL简介与安装

MySQL简介与安装 一、MySQL简介二、MySQL安装(一)Windows系统上的安装(二)Linux系统上的安装(以Ubuntu为例)(三)Mac OS系统上的安装三、安装后的基本配置四、总结一、MySQL简介 MySQL是一个流行的开源关系型数据库管理系统(RDBMS),广泛应用于各种业务场景,从小型个…

干货分享:代理IP的10大误区

在当今的数字时代&#xff0c;代理已成为在线环境不可或缺的一部分。它们的用途广泛&#xff0c;从增强在线隐私到绕过地理限制。然而&#xff0c;尽管代理无处不在&#xff0c;但仍存在许多围绕代理的误解。在本博客中&#xff0c;我们将探讨和消除一些最常见的代理误解&#…

AI太火,今年更缺人了 (含实习)

AI太火了&#xff01;眼睛一睁一闭&#xff0c;一大堆新鲜出炉的前沿科技进展已经塞满未读列表。 许多公司更是开出了高薪&#xff0c; 读者福利&#xff1a;如果大家对大模型感兴趣&#xff0c;这套大模型学习资料一定对你有用 对于0基础小白入门&#xff1a; 如果你是零基础…

构建LangChain应用程序的示例代码:50、如何在检索-生成 (RAG) 应用中利用多模态大型语言模型 (LLM) 处理包含文本和图像的混合文档的示例

多模态 RAG 许多文档包含多种内容类型&#xff0c;包括文本和图像。 然而&#xff0c;大多数 RAG 应用中&#xff0c;图像中捕获的信息往往被忽略。 随着多模态 LLM 的出现&#xff0c;如 GPT-4V&#xff0c;值得考虑如何在 RAG 中利用图像&#xff1a; 选项 1&#xff1a;…

CDC同步器设计方案:为什么使用异步路径?

随着现代ASIC中时钟域的增加&#xff0c;时钟域交叉&#xff08;CDC&#xff09;变得无处不在&#xff0c;必不可少且必不可少。当然&#xff0c;时间安排总是一个问题。高时钟速度和信号路径中的延迟会导致信号到达不希望的时刻&#xff0c;从而导致亚稳性。本文的部分重点介绍…

pandas数据分析(5)

pandas使用Numpy的np.nan代表缺失数据&#xff0c;显示为NaN。NaN是浮点数标准中地Not-a-Number。对于时间戳&#xff0c;则使用pd.NaT&#xff0c;而文本使用的是None。 首先构造一组数据&#xff1a; 使用None或者np.nan来表示缺失的值&#xff1a; 清理DataFrame时&#xf…

【关于C/C++中的scanf不能使用问题】

方法1&#xff1a;scanf_s 方法2&#xff1a;看见后面的日志了吗 CRT……&#xff1f;在第一行加上#define 日志 方法3&#xff1a;#pragma warning&#xff08;disable&#xff1a;4996&#xff09; 4996是我们的报错序号

PDF压缩工具选哪个?6款免费PDF压缩工具分享

PDF文件已经成为一种常见的文档格式。然而&#xff0c;PDF文件的体积有时可能非常庞大&#xff0c;尤其是在包含大量图像或复杂格式的情况下。选择一个高效的PDF压缩工具就显得尤为重要。小编今天给大家整理了2024年6款市面上反响不错的PDF压缩文件工具。轻松帮助你找到最适合自…

广州外贸建站模板

Yamal外贸独立站wordpress主题 绿色的亚马尔Yamal外贸独立站wordpress模板&#xff0c;适用于外贸公司建独立站的wordpress主题。 https://www.jianzhanpress.com/?p7066 赛斯科Sesko-W外贸建站WP主题 适合机械设备生产厂家出海做外贸官网的wordpress主题&#xff0c;红橙色…

【区块链+基础设施】银联云区块链服务 | FISCO BCOS应用案例

为了顺应区块链基础设施化的发展趋势&#xff0c;中国银联推出了银联云区块链服务——UPBaaS&#xff0c;为金融行业采用区块链 技术提出了解决方案&#xff0c;微众银行为平台提供 FISCO BCOS 区块链开源技术支持。通过银联云区块链服务&#xff0c;用户可 以用可视化的方式创…

安卓应用开发学习:通过腾讯地图SDK实现定位功能

一、引言 这几天有些忙&#xff0c;耽误了写日志&#xff0c;但我的学习始终没有落下&#xff0c;有空我就会研究《 Android App 开发进阶与项目实战》一书中定位导航方面的内容。在我的手机上先后实现了“获取经纬度及地理位置描述信息”和“获取导航卫星信息”功能后&#x…

java基于ssm+vue 病人跟踪治疗信息管理系统

1病人功能模块 病人登录进入病人跟踪治疗信息管理系统可以查看首页、个人中心、病例采集管理、预约管理、医生管理、上传核酸检测报告管理、上传行动轨迹管理、病人治疗状况管理等内容。 病例采集管理&#xff0c;在病例采集管理页面可以查看账号、姓名、住院号、入院时间、病…

git 禁止dev合并到任何其他分支

创建 pre-merge-commit 钩子 导航到 Git 仓库的钩子目录&#xff1a; cd /path/to/your/repo/.git/hooks创建或编辑 pre-merge-commit 钩子&#xff1a; 也可以通过指令创建 nano pre-merge-commit在钩子文件中添加以下代码&#xff1a; #!/bin/sh# 获取当前分支名称 curr…

成人职场商务英语学习柯桥外语学校|邮件中的“备注”用英语怎么说?

在英语中&#xff0c;"备注"通常可以翻译为"Notes" 或 "Remarks"。 这两个词在邮件中都很常用。例如: 1. Notes Notes: 是最通用和最常见的表达&#xff0c;可以用在各种情况下&#xff0c;例如&#xff1a; 提供有关电子邮件内容的附加信息 列…

hive中cast()函数

CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式&#xff0c;它包括用AS关键字分隔的源值和目标数据类型。 语法&#xff1a;CAST (expression AS data_type) expression&#xff1a;任何有效的SQServer表达式。 AS&#xff1a;用…

软降工程学系统实现

一、程序编码 程序编码是设计的继续&#xff0c;将软件设计的结果翻译成用某种程序设计语言描述的源代码。 程序编码涉及到方法、工具和过程。 程序设计风格和程序设计语言的特性会深刻地影响软件的质量和可维护性。 要求源程序具有良好的结构性和设计风格。 程序设计风格…