学习笔记(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.rhkb.cn/news/369730.html

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

相关文章

windows电脑网络重置后wifi列表消失怎么办?

我们的电脑网络偶尔会出现异常&#xff0c;我们通常会下意识选择网络诊断&#xff0c;运行完诊断后一般会让我们选择重置网络&#xff0c;然而&#xff0c;重置后wifi列表突然消失&#xff0c;无法愉快地上网了&#xff0c;找了一圈&#xff0c;都说是更改适配器选项&#xff0…

【东奥会计-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

JavaScript(6)——数据类型转换

为什么需要类型转换&#xff1f; JavaScript是弱数据类型&#xff1a;JavaScript不知道变量到底属于哪种数据类型&#xff0c;只有赋值了才清除 使用表单&#xff0c;prompt获取的数据默认为字符串类型&#xff0c;此时不能直接进行算数运算 隐式转换 某些运算符被执行时&am…

gitLab使用流程

标题1.配置账户 git config --global user.name git config --global user.email mygitlabmali.cn 标题2.生成秘匙 ssh-keygen -t rsa -C “mygitlabmail.cn” 。 //输入命令后一直回车 &#xff0c;输入命令后一直回车&#xff08;密码可以不填&#xff09;&#xff0c;至…

证券交易系统中服务器监控系统功能设计

1.背景介绍 此服务器监控系统的目的在于提高行情服务器的监管效率&#xff0c;因目前的的行情服务器&#xff0c;包括DM、DT、DS配置数量较多&#xff0c;巡回维护耗时较多&#xff0c;当行情服务器出现异常故障&#xff0c;或者因为网络问题造成数据断线等情况时&#xff0c;监…

k8s record 20240705

k8s 安全管理 request 是1g&#xff0c;你得不到要求&#xff0c;我就不创建了&#xff0c;这就是准入控制二次校验 SA就是serviceAccount。 内部是SA和 token, 外部用户进来就是 .kube/config文件 namespace下的是role&#xff0c;整个集群是 ClusterRole. 动作就是Binding li…

电机驱动----L298N

一、介绍 L298N 是一种双H桥电机驱动芯片&#xff0c;其中每个H桥可以提供2A的电流&#xff0c;内含4路逻辑驱动电路&#xff0c;功率部分的供电电压范围是2.5-48v&#xff0c;逻辑部分5v供电&#xff0c;接受5vTTL电平。一般情况下&#xff0c;功率部分的电压应大于6V否则芯片…

LeetCode刷题记录:(15)三角形最小路径和

知识点&#xff1a;倒叙的动态规划 题目传送 解法一&#xff1a;二维动态规划【容易理解】 class Solution {public int minimumTotal(List<List<Integer>> triangle) {int n triangle.size();if (n 1) {return triangle.get(0).get(0);}// dp[i][j]:走到第i层第…

代理设计模式和装饰器设计模式的区别

代理设计模式: 作用:为目标(原始对象)增加功能(额外功能,拓展功能) 三种经典应用场景: 1&#xff1a;给原始对象增加额外功能(spring添加事务,Mybatis通过代理实现缓存功能等等) 2&#xff1a;远程代理&#xff08;网络通信&#xff0c;输出传输&#xff08;RPC&#xff0c;D…

2024年07月03日 Redis部署方式和持久化

Redis持久化方式&#xff1a;RDB和AOF&#xff0c;和混合式 RDB&#xff1a;周期备份模式&#xff0c;每隔一段时间备份一份快照文件&#xff0c;从主线程Fork一个备份线程出来备份&#xff0c;缺点是会造成数据的丢失。 AOF&#xff1a;日志模式&#xff0c;每条命令都以操作…

LabVIEW环境下OCR文字识别的实现策略与挑战解析

引言 在自动化测试领域&#xff0c;OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术扮演着重要角色&#xff0c;它能够将图像中的文字转换成机器可编辑的格式。对于使用LabVIEW约5个月&#xff0c;主要进行仪器控制与数据采集的你而言…

linux ls文件排序

linux可以使用ls命令结合一些选项来按照文件大小对文件和目录进行排序。以下是一些常用的方法&#xff1a; 1、这里&#xff0c;-l 选项表示长格式输出&#xff08;包括文件权限、所有者、大小等&#xff09;&#xff0c;-S 选项表示按照文件大小排序&#xff0c;-h 选项表示以…

hitcontraining_uaf

BUUCTF[PWN][堆] 题目&#xff1a;BUUCTF在线评测 (buuoj.cn) 程序del是没有将申请的指针清零&#xff0c;导致可以再次调用输出print。 查看add_note函数&#xff1a;根据当前 notelist 是否为空&#xff0c;来申请了一个8字节的空间将地址(指针)放在notelist[i]中&#xff…

Unity 解包工具(AssetStudio/UtinyRipper)

文章目录 1.UtinyRipper2.AssetStudio 1.UtinyRipper 官方地址&#xff1a; https://github.com/mafaca/UtinyRipper/ 下载步骤&#xff1a; 2.AssetStudio 官方地址&#xff1a; https://github.com/Perfare/AssetStudio 下载步骤&#xff1a;

Eslint prettier airbnb规范 配置

1.安装vscode的Eslint和prettier 插件 eslint&#xff1a;代码质量检查工具 https://eslint.nodejs.cn/docs/latest/use/getting-started prettier&#xff1a;代码风格格式化工具 https://www.prettier.cn/docs/index.html /* eslint-config-airbnb-base airbnb 规范 esl…

ASP.NET Core Blazor 5:Blazor表单和数据

本章将描述 Blazor 为处理 HTML 表单提供的特性&#xff0c;包括对数据验证的支持。 1 准备工作 继续使用上一章项目。   创建 Blazor/Forms 文件夹并添加一个名为 EmptyLayout.razor 的 Razor 组件。本章使用这个组件作为主要的布局。 inherits LayoutComponentBase<div …

泛微E9开发 根据故障来源新增明细行,并且初始化错误类型

根据故障来源新增明细行&#xff0c;并且初始化错误类型 1、需求说明2、实现方法3、扩展知识点3.1 批量修改字段值或显示属性3.1.1 格式3.1.2 参数3.1.3 演示 3.2 根据字段ID获取字段信息3.2.1 格式3.2.2 参数3.2.3 演示 1、需求说明 用户对出现故障的机器或设备进行判断问题判…

【数据库了解与学习】

1.下载所需版本安装包 1.1将所需文件压缩包以及安装包放在你选择的任意一盘&#xff0c;新建一个没有文字和空格的文件夹 1.2双击打开安装包&#xff0c;选择Custom自定义模式然后点击右下方的Next 1.4三连点击1&#xff0c;再点击箭头出现3&#xff0c;选中3出现4&#xff0c;…

Java--继承

1.继承的本质是对某一批类的抽象&#xff0c;从而实现对世界更好的建模 2.extends的意思是“扩展”&#xff0c;子类是父亲的扩展 3.Java中只有单继承&#xff0c;没有多继承 4.继承关系的两个类&#xff0c;一个为子类&#xff08;派生类&#xff09;&#xff0c;一个为父类…

用html+css设计一个列表清单小卡片

目录 简介: 效果图: 源代码: 可能的问题: 简介: 这个HTML代码片段是一个简单的列表清单设计。它包含一个卡片元素(class为"card"),内部包含一个无序列表(ul),列表项(li)前面有一个特殊的符号(△)。整个卡片元素设计成300px宽,150px高,具有圆角边…