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

news2024/10/6 1:03:59

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.coloradmin.cn/o/1886246.html

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

相关文章

【MySQL】mysql访问

mysql访问 1.引入MySQL 客户端库2.C/C 进行增删改3.查询的处理细节4.图形化界面访问数据库4.1下载MYSQL Workbench4.2MYSQL Workbench远程连接数据库 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&a…

基于CNN的股票预测方法【卷积神经网络】

基于机器学习方法的股票预测系列文章目录 一、基于强化学习DQN的股票预测【股票交易】 二、基于CNN的股票预测方法【卷积神经网络】 文章目录 基于机器学习方法的股票预测系列文章目录一、CNN建模原理二、模型搭建三、模型参数的选择&#xff08;1&#xff09;探究window_size…

8619 公约公倍

这个问题可以通过计算最大公约数 (GCD) 和最小公倍数 (LCM) 来解决。我们需要找到一个整数&#xff0c;它是 a, b, c 的 GCD 的倍数&#xff0c;同时也是 d, e, f 的 LCM 的约数。 以下是解决这个问题的步骤&#xff1a; 1. 计算 a, b, c 的最大公约数。 2. 计算 d, e, f 的最…

SAP MM模块的ATP检查

前面几篇文章都演示和说明ATP的一些设置和操作&#xff0c;通常情况下ATP的检查PP模块&#xff0c;SD模块用的相对来说是比较多的&#xff0c;但是实际上MM模块也会遵循ATP的可用性的检查规则。 当我们在做311、301等移动类型时&#xff0c;系统会根据相应的可用性检查规则&am…

大模型应用开发实战基础

大模型应用开发实战基础 1. 背景 大模型如日中天&#xff0c;各行各业都受它影响&#xff0c;但是作为程序员&#xff0c;除了让它翻译代码不知道用它干什么&#xff0c;就像是拿着锤子的木匠&#xff0c;找不到钉子在哪。一边听着别人说2024是AI元年&#xff0c;一边又不知所…

基于X86+FPGA的精密加工检测设备解决方案

应用场景 随着我国高新技术的发展和国防现代化发展&#xff0c;航空、航天等领域需 要的大型光电子器件&#xff0c;微型电子机械、 光 电信息等领域需要的微型器件&#xff0c;还有一些复杂零件的加工需求日益增加&#xff0c;这些都需要借助精密甚至超精密的加工检测设备 客…

Asp.NET identity以及Owin

》》》Identity是集成到Owin框架中中 ● Microsoft.AspNet.Identity.Core&#xff1a;Identity的核心类库&#xff0c;实现了身份验证的核心功能&#xff0c;并提供了拓展接口。● Microsoft.AspNet.Identity.EntityFramework&#xff1a;Identity数据持久化的EF实现。   ● …

强化学习的数学原理:最优贝尔曼公式

大纲 贝尔曼最优公式是贝尔曼公式的一个特殊情况&#xff0c;但其也非常重要。 本节课很重要的两个概念和一个工具&#xff1a; 工具不用多说&#xff0c;就是贝尔曼最优公式&#xff0c;概念则是 optimal state value&#xff08;最优状态价值&#xff09; 和 optimal polic…

文件中各个函数返回----EOF----NULL---非零值>>>>>区分

fopen 返回值&#xff1a;操作正常返回文件指针&#xff0c; 失败返回NULL fclose 返回值&#xff1a;操作正常返回 0 失败返回EOF 不关闭文件会丢失 fgetc 返回值&#xff1a; 成功读入字符 失败返回EOF fputc 返回值&#xff1a;成功输出的字符 失败返回EOF fgets …

香橙派OrangePi AIpro初体验:当小白拿到一块开发板第一时间会做什么?

文章目录 香橙派OrangePi AIpro初体验&#xff1a;当小白拿到一块高性能AI开发板第一时间会做什么前言一、香橙派OrangePi AIpro概述1.简介2.引脚图开箱图片 二、使用体验1.基础操作2.软件工具分析 三、香橙派OrangePi AIpro.测试Demo1.测试Demo1&#xff1a;录音和播音(USB接口…

MySQL的并发控制、事务、日志

目录 一.并发控制 1.锁机制 2.加锁与释放锁 二.事务&#xff08;transactions&#xff09; 1.事物的概念 2.ACID特性 3.事务隔离级别 三.日志 1.事务日志 2.错误日志 3.通用日志 4.慢查询日志 5.二进制日志 备份 一.并发控制 在 MySQL 中&#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…

ubuntu apt命令 出现红色弹框 Daemons using outdated libraries

1. 弹框没截图&#xff0c;是因为ubuntu22.04一个新特性导致的&#xff0c;由 needrestart 命令触发&#xff0c;默认情况是交互性质的&#xff0c;也就是会中断在这里需要手动要处理提示。 2. 修改/etc/needrestart/needrestart.conf 文件&#xff0c;将 #$nrconf{restart} …

APKDeepLens:一款针对Android应用程序的安全扫描工具

关于APKDeepLens APKDeepLens是一款针对Android应用程序的安全扫描工具&#xff0c;该工具基于Python开发&#xff0c;旨在扫描和识别Android应用程序&#xff08;APK文件&#xff09;中的安全漏洞。 APKDeepLens主要针对的是OWASP Top 10移动端安全漏洞&#xff0c;并为开发人…

力扣热100 哈希

哈希 1. 两数之和49.字母异位词分组128.最长连续序列 1. 两数之和 题目&#xff1a;给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。你可以假设每种输入只会对应一个答案。…

计算机缺少d3dcompiler_43.dll无法继续执行代码怎么修复

打开游戏或许软件程序时候&#xff0c;我们会经常遇到各式各样的问题&#xff0c;比如找不到d3dcompiler_43.dll无法继续执行代码就是非常常见的问题&#xff0c;今天我叫大家如何解决遇到d3dcompiler_43.dll丢失问题&#xff0c;也详细介绍d3dcompiler_43.dll文件是什么与丢失…

什么方法能快速分享视频给他人?视频二维码提供预览的制作技巧

现在想要分享一个或者多个视频时&#xff0c;很多人会选择将视频生成二维码的方法来展现视频内容&#xff0c;通过这种方式可以让多人同时扫码查看同一个视频&#xff0c;有效提升其他人获取内容的速度及视频传播的效率。那么视频转换成二维码的方法是什么样的呢&#xff1f; …

replace()方法——替换字符串

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 replace()方法用于将某一字符串中一部分字符替换为指定的新字符&#xff0c;如果不指定新字符&#xff0c;那么原字符将被直接去除&#x…

数据库取出来的日期格式是数组格式,序列化日期格式

序列化前&#xff0c;如图所示&#xff1a; 解决方式&#xff0c;序列化日期&#xff08;localdatetime&#xff09;格式 步骤一、添加序列化类 package com.abliner.test.common.configure;import com.alibaba.fastjson.serializer.JSONSerializer; import com.alibaba.fas…

[图解]企业应用架构模式2024新译本讲解19-数据映射器1

1 00:00:01,720 --> 00:00:03,950 下一个我们要讲的就是 2 00:00:04,660 --> 00:00:07,420 数据映射器这个模式 3 00:00:09,760 --> 00:00:13,420 这个也是在数据源模式里面 4 00:00:13,430 --> 00:00:14,820 用得最广泛的 5 00:00:16,250 --> 00:00:19,170…