匿名管道-

因为父子进程是共享文件描述符的环形队列,只能读一次 会被后面覆盖

/*#include <unistd.h>int pipe(int pipefd[2]);功能:创建一个匿名管道,用于进程间通信参数:int 类型数组 ,是传出参数pipefd[0]是管道读端 pipefd[2]是管道写端返回值:成功 0失败 -1管道默认是阻塞的,如果管道中没有数据,read阻塞,如果通道满了,write阻塞匿名管道只能用于有关系的进程之间的通信(父子进程 兄弟进程)
*/
//子进程发数据给父进程
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
#include<string.h>
int main() {//在fork之前创造管道int pipefd[2];int ret = pipe(pipefd);if(ret == -1) {perror("pipe");exit(0);}pid_t pid = fork();if(pid > 0) {printf("parent process, pid: %d\n", getpid());char buf[1024] = {0};while(1) {int len = read(pipefd[0], buf, sizeof(buf));printf("parent recv: %s, pid: %d\n", buf, getpid());char* str = "hello, i am parent";write(pipefd[1], str, strlen(str));sleep(1);}}else if(pid == 0) {printf("child process, pid: %d\n", getpid());char buf[1024] = {0};while(1) {char* str = "hello, i am child";write(pipefd[1], str, strlen(str));sleep(1);int len = read(pipefd[0], buf, sizeof(buf));printf("child recv: %s, pid: %d\n", buf, getpid());}}return 0;
}

有可能出现自己写自己读的现象

特点(假设都是阻塞态):

1.所有的指向管道写端的文件描述符都关闭了(管道写端引用计数为0),有进程从管道的读端读数据,那么当管道内部的数据被读取之后,再次read会返回0,就像读到文件末尾一样。

2.如果有指向管道写端的文件描述符没有关闭(管道的写端引用计数大于0)。而持有管道写端的进程也没有往管道中读取数据,这个时候有进程从管道中读取数据,那么管道中剩余的数据被读取后,再次read会堵塞,直到管道中有数据可以读了才读取数据并返回

3. 如果所有的指向管道读端的文件描述符关闭了(管道的读端引用计数0),这个时候向管道中写数据,那么该进程会受到信号SIGPIPE,导致进程异常终止。

4.如果有主席昂管道读端的文件描述符没有关闭(管道的读端引用计数大于0),而持有管道读端进程也没有从管道中读数据,这时候有进程向管道中写数据,那么在管道被写满的时候再次write会堵塞,直到管道中有空位置。

        

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

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

相关文章

Python 1-03 基础语法测试

基础语法测试 1、注册 Leetcode 2、学会使用平台 223. 矩形面积 知识点&#xff1a; return, max(), .min() class Solution:def computeArea(self, ax1: int, ay1: int, ax2: int, ay2: int, bx1: int, by1: int, bx2: int, by2: int) -> int:a (ax1 - ax2) * (ay1 - …

Git多人开发解决冲突案例

准备工作&#xff1a; 1.创建一个gitee远程仓库https://gitee.com/xxxxxxx.git 2.初始化两个本地git仓库用户&#xff0c;目的是模拟多人协作开发时提交代码发生冲突的场景 3.解决冲突并提交。 进入正题&#xff1a; lisi 通过vim指令修改readme.md文件内容&#xff0c;推送到…

Centos8系统中安装docker-compose报错(已解决)

1.报错内容&#xff1a; ModuleNotFoundError: No module named setuptools_rust Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-jrzp2ukw/bcrypt/2.报错原因&#xff1a; 在CentOS8中安装“加密”程序包时出现问题。当包所需的…

cv2.calibrateCamera函数

ret, mtx, dist, r_vecs, t_vecs cv2.calibrateCamera(obj_points, img_points, size, None, None)这个函数里的obj_points和img_points是同一相机不同视角下20张图片的角点&#xff0c;那这个函数返回的旋转向量r_vecs和位置矢量t_vecs是指什么&#xff0c;因为20张图像&…

Windows关闭zookeeper、rocketmq日志输出以及修改rocketmq的JVM内存占用大小

JDK-1.8zookeeper-3.4.14rocketmq-3.2.6 zookeeper 进入到zookeeper的conf目录 清空配置文件&#xff0c;只保留下面这一行。zookeeper关闭日志输出相对简单。 log4j.rootLoggerOFFrocketmq 进入到rocketmq的conf目录 logback_broker.xml <?xml version"1.0&q…

基于Matlab实现自动泊车(垂直泊车)

自动泊车是一项非常有趣和实用的技术&#xff0c;它可以让车辆在没有人为干预的情况下自动停放在合适的位置上。在这篇文章中&#xff0c;我们将介绍如何使用Matlab实现自动泊车。 首先&#xff0c;我们需要了解自动泊车的基本原理。自动泊车系统通常包括车辆、传感器和控制算…

SpringMVC中的JSR303与拦截器的使用

一&#xff0c;JSR303的概念 JSR303是Java中的一个标准&#xff0c;用于验证和校验JavaBean对象的属性的合法性。它提供了一组用于定义验证规则的注解&#xff0c;如NotNull、Min、Max等。在Spring MVC中&#xff0c;可以使用JSR303注解对请求参数进行校验。 1.2 为什么要使用J…

RepViT:从ViT视角重新审视移动CNN

文章目录 摘要1、简介2、相关工作3、方法论3.1、初步3.2、Block设计3.3、宏观设计3.4、微观设计3.5、网络架构4、实验4.1、图像分类4.2、目标检测与实例分割4.3、语义分割5、结论A. RepViTs架构一些名词的理解mobile-friendlinessEarly Convolutions摘要 https://arxiv.org/pd…

7.SpringEL使用正则表达式

SpringEL使用正则表达式 文章目录 SpringEL使用正则表达式介绍Spring EL以注解的形式Spring EL以XML的形式 介绍 Spring Expression Language (SpEL) 中可以使用正则表达式进行模式匹配。以下是一个使用SpEL和正则表达式的案例&#xff1a; 假设我们有一个字符串列表&#xf…

深度学习-卷积神经网络-纹理表示卷积神经网络-卷积神经网络-[北邮鲁鹏]

这里写目录标题 参考文章全连接神经网络全连接神经网络的瓶颈全连接神经网络应用场景 卷积神经网络卷积层(CONV)卷积核卷积操作卷积层设计卷积步长(stride)边界填充特征响应图组尺寸计算 激活层池化层(POOL)池化操作定义池化操作作用池化层超参数常见池化操作 全连接层(FC)样本…

【看好了】如何使用fiddler实现手机抓包,Filters过滤器!

一、Fiddler与其他抓包工具的区别  1、Firebug虽然可以抓包&#xff0c;但是对于分析http请求的详细信息&#xff0c;不够强大。模拟http请求的功能也不够&#xff0c;且firebug常常是需要“无刷新修改”&#xff0c;如果刷新了页面&#xff0c;所有的修改都不会保存&#xff…

成绩分析(蓝桥杯)

成绩分析 题目描述 小蓝给学生们组织了一场考试&#xff0c;卷面总分为 100 分&#xff0c;每个学生的得分都是一个 0 到 100 的整数。 请计算这次考试的最高分、最低分和平均分。 输入描述 输入的第一行包含一个整数 n (1≤n≤104 )&#xff0c;表示考试人数。 接下来 n 行…

数据治理-数据存储和操作-数据处理类型

数据库处理有两种基本类型&#xff0c;ACID和BASE,ACID是酸的意思&#xff0c;而BASE有碱的含义&#xff0c;是对立的两端。CAP定理用于界定分布式系统与ACID(强调一致性C)还是BASE(强调可用性)更加接近。 ACID 原子性&#xff1a;所有操作要么都完成&#xff0c;要么一个也不…

文安县人社局 举办“情暖灾区 就业护航”直播带岗活动

关于防汛救灾工作重要指示精神&#xff0c;助力受灾企业尽快复工复产、受灾群众尽早实现就业。9月15日&#xff0c;文安县人力资源和社会保障局联合文安县总工会、国家税务总局文安县税务局共同举办文安县助力企业灾后重建“直播带岗”活动。 本次活动以“情暖灾区 就业护航”…

IDEA中DEBUG技巧

Debug 介绍 Debug 设置 如上图标注 1 所示&#xff0c;表示设置 Debug 连接方式&#xff0c;默认是 Socket。Shared memory 是 Windows 特有的一个属性&#xff0c;一般在 Windows 系统下建议使用此设置&#xff0c;相对于 Socket 会快点。 ## Debug 常用快捷键 Win 快捷键M…

分享一个Python 写的监控日志log txt文档 的代码

监控log文件的需求 某些特殊原因&#xff0c;想一直看到.log 的最后一行打印&#xff0c;所以写了一些代码监控log &#xff08;有个奇怪需求&#xff0c;就是log 因为重复启动原因&#xff0c;会一直加&#xff0c;不是同一个log&#xff09; 监控界面 涉及的Python代码&…

VS版本下载

VS 版本下载&#xff1a; 怎样才能从微软官网下载VS系列开发工具&#xff1f; - 知乎

华为OD机考算法题:告警抑制

题目部分 题目华为OD机考算法题&#xff1a;告警抑制难度易题目说明告警抑制&#xff0c;是指高优先级告警抑制低优先级告警的规则。高优先级告警产生后&#xff0c;低优先级告警不再产生。请根据原始告警列表和告警抑制关系&#xff0c;给出实际产生的告警列表。 注&#xff…

Unity SteamVR 开发教程:用摇杆/触摸板控制人物持续移动(2.x 以上版本)

文章目录 &#x1f4d5;教程说明&#x1f4d5;场景搭建&#x1f4d5;创建移动的动作&#x1f4d5;移动脚本⭐移动⭐实时调整 CharacterController 的高度 &#x1f4d5;取消手部和 CharacterController 的碰撞 持续移动是 VR 开发中的一个常用功能。一般是用户推动手柄摇杆&…

WSL2 内存只有 Windows 的一半?可以设置 .wslconfig 解决

偶然 htop 发现 WSL 里面的内存只有 16GB&#xff0c;而我的 Windows 是 32GB 的&#xff0c;才了解到默认的设置就是 50% 的 RAM 占用&#xff0c;可以通过设置 .wslconfig 解决这个问题。 .wslconfig 的路径 在 C:\Users\YourUsername\.wslconfig&#xff0c;如果发现没有这…