当前位置: 首页 > news >正文

深圳专业做网站排名公司哪家好/百度网络营销中心

深圳专业做网站排名公司哪家好,百度网络营销中心,广东网页制作网站,百度行业网站怎么做Linux C语言 39-进程间通信IPC之管道 本节关键字:C语言 进程间通信 管道 FIFO 相关库函数:pipe、mkfifo、mknod、write、read 什么是管道? 管道通常指“无名管道”,是Unix系统中最古老的IPC通信方式。 管道的分类 管道&#…

Linux C语言 39-进程间通信IPC之管道

本节关键字:C语言 进程间通信 管道 FIFO
相关库函数:pipe、mkfifo、mknod、write、read

什么是管道?

管道通常指“无名管道”,是Unix系统中最古老的IPC通信方式。

管道的分类

  • 管道(无名管道)
  • FIFO(命名管道)

管道的特点

管道(无名管道)
  • 半双工,数据只能由连接的一端发送到另一端,并且读端和写端固定;
  • 只能用于具有亲缘关系的进程通信,如父子进程、兄弟进程;
  • 可以当成一种特殊的文件,不属于任何文件系统,只存在于内存中。读写使用read()和write等函数;
  • 管道有互斥功能,同一时间只能有一个进程从管道读取数据。
FIFO(命名管道)
  • FIFO是一种文件类型,有路径名,以一种特殊设备文件形式存在于文件系统中;
  • FIFO可以在无关的进程之间交换数据,这点与无名管道不同;
  • 管道有互斥功能,同一时间只能有一个进程从管道读取数据。

管道相关库函数

管道(无名管道)
#include <unistd.h>
int pipe(int fd[2]);
/**
@brief 创建管道,需要手动关闭管道,即手动关闭两个文件描述符
@param fd 承接管道创建时的两个文件描述符,fd[0]为读端描述符,fd[1]为写端描述符
@return 成功返回0,失败返回-1并设置错误码error错误码error类型:
EFAULT     pipefd无效
EINVAL     (pipe2())标志中的值无效
EMFILE  进程正在使用的文件描述符过多
ENFILE     打开文件总数已达到系统限制
*/
管道使用例程
// 管道使用例程:创建管道和进程,子进程读管道,父进程写管道
#include <sys/wait.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>int main(int argc, char *argv[])
{int pipefd[2];pid_t cpid;char buf;assert(argc == 2);    // 断言:有一个命令行参数,argv[1]将被写入管道if (pipe(pipefd) == -1) {perror("pipe");exit(EXIT_FAILURE);}cpid = fork();if (cpid == -1) {perror("fork");exit(EXIT_FAILURE);}if (cpid == 0)        // 子进程:关闭写文件描述符,读管道{close(pipefd[1]);while (read(pipefd[0], &buf, 1) > 0)write(STDOUT_FILENO, &buf, 1);write(STDOUT_FILENO, "\n", 1);close(pipefd[0]);_exit(EXIT_SUCCESS);} else                   // 父进程:关闭读文件描述符,写管道,将命令行参数argv[1]写入管道{close(pipefd[0]);write(pipefd[1], argv[1], strlen(argv[1]));close(pipefd[1]);  // 读端将收到EOFwait(NULL);        // 等待子进程退出exit(EXIT_SUCCESS);}return 0;
}
FIFO(命名管道)
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);
/**
@brief 创建FIFO管道,需要手动关闭管道,即手动关闭文件描述符。FIFO特殊文件不是匿名通信通道,而是通过调用mkfifo()输入到文件系统中
@param pathname FIFO的路径名,文件真实存在
@param mode 创建FIFO文件的权限,创建的文件的权限为(mode&~umask)
@return 成功返回0,失败返回-1并设置错误码error错误码error分类:
EACCES        路径名中的一个目录没有搜索(执行)权限
EEXIST        路径名已存在。这包括路径名是符号链接的情况,无论是否悬空
ENAMETOOLONG    路径名的总长度大于PATH_MAX,或者单个文件名组件的长度大于NAME_MAX。在GNU系统中,对文件名的总长度没有强制限制,但一些文件系统可能会对组件的长度进行限制
ENOENT        路径名中的目录组件不存在,或者是悬挂的符号链接
ENOSPC        目录或文件系统没有空间容纳新文件
ENOTDIR        在路径名中用作目录的组件实际上不是目录
EROFS        路径名是指只读文件系统Trip:一旦你以这种方式创建了一个FIFO特殊文件,任何进程都可以像普通文件一样打开它进行读取或写入。然而,在您可以继续对其进行任何输入或输出操作之前,它必须同时在两端打开。打开FIFO以正常读取块,直到其他进程打开相同的FIFO进行写入,反之亦然。有关fifo特殊文件的非阻塞处理,请参见fifo(7)。
*/
FIFO使用例程

FIFO使用例程:创建FIFO,多个个服务端读,多个个客户端写,验证管道的互斥功能

FIFO使用服务端例程
// FIFO使用例程 服务端,循环读取管道中的信息,直到管道的所有写端关闭
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>int main(void)
{char pathname[] = "./myfifo";int ret, fd;char buffer[1024];umask(0);ret = mkfifo(pathname, 0666);  // mode附加读写权限fd = open(pathname, O_RDONLY); // 服务端只读打开FIFO文件if (fd < 0)return -1;for ( ; ; ){bzero(buffer, 0);ret = read(fd, buffer, sizeof(buffer)-1);if (ret > 0){printf("server recv: %s\n", buffer);fflush(stdout);}else if (ret == 0){printf("server: client quit\n");break;}else{perror("server failed to read myfifo\n");break;}}close(fd);return 0;
}
FIFO使用客户端例程
// FIFO使用例程:客户端,将用户输入的信息写入管道,循环执行6次退出
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>int main(void)
{char pathname[] = "./myfifo";int ret, fd, cnt;char buffer[1024];fd = open(pathname, O_WRONLY);    // 客户端只写开打FIFO文件if (fd < 0)return -1;do{printf("please input message: ");fflush(stdout);bzero(buffer, 0);ret = read(STDIN_FILENO, buffer, sizeof(buffer)-1);if (ret <= 0){perror("read");}else{write(fd, buffer, ret);}} while (++cnt <= 5);close(fd);return 0;
}
运行结果
/// 从两个服务端的运行结果可知,管道有互斥功能,同一时刻只有一个进程可以从管道读取数据// 服务端1:
$ ./fifoserver 
server recv: client1: 1server recv: client2: 1server recv: client1: 2server recv: client1: 3server recv: client1: 5server recv: client2: 4server recv: client2: 6server: client quit// 服务端2:
$ ./fifoserver 
server recv: client1: 4server recv: client1: 6server recv: client2: 2server recv: client2: 3server recv: client2: 5server: client quit// 客户端1:
$ ./fifoclient 
please input message: client1: 1    
please input message: client1: 2
please input message: client1: 3
please input message: client1: 4
please input message: client1: 5
please input message: client1: 6// 客户端2:
$ ./fifoclient 
please input message: client2: 1
please input message: client2: 2     
please input message: client2: 3
please input message: client2: 4
please input message: client2: 5
please input message: client2: 6

启动server后使用ll命令查看目录文件信息,可以看到已经创建了myfifo文件
FIFO的创建

相关文章:

Linux C语言 39-进程间通信IPC之管道

Linux C语言 39-进程间通信IPC之管道 本节关键字&#xff1a;C语言 进程间通信 管道 FIFO 相关库函数&#xff1a;pipe、mkfifo、mknod、write、read 什么是管道&#xff1f; 管道通常指“无名管道”&#xff0c;是Unix系统中最古老的IPC通信方式。 管道的分类 管道&#…...

python pandas dataframe常用数据处理总结

最近一直在做数据处理相关的工作&#xff0c;有几点经常遇到的情况总结如下&#xff1a; 数据中存在为空数据如何处理 处理方式1&#xff1a;丢弃数据行 # 实现方式1 data data.dropna(subset[id]) # 若id列中某行数值为空&#xff0c;丢弃整行数据 # 实现方式2 data df[df…...

excel做预测的方法集合

一. LINEST函数 首先&#xff0c;一元线性回归的方程&#xff1a; y a bx 相应的&#xff0c;多元线性回归方程式&#xff1a; y a b1x1 b2x2 … bnxn 这里&#xff1a; y - 因变量即预测值x - 自变量a - 截距b - 斜率 LINEST的可以返回回归方程的 截距(a) 和 斜…...

12月8日作业

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数&#xff1b;将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断u界面上输入的账号是否为"admin"&#xff0c;…...

RefCell 数据类型

内部可变性&#xff08;interior mutability&#xff09;是RUST的设计模式之一&#xff0c;它允许你在只持有不可变引用的前提下对数据进行修改。为了能改变数据&#xff0c;内部可变性模式在它的数据结构中使用了unsafe&#xff08;不安全&#xff09;代码来绕过RUST正常的可变…...

[oeasy]python0002_终端_CLI_GUI_编程环境_游戏_真实_元宇宙

回忆 上次 了解了 python 语言的特点 历史悠久功能强大深受好评已成趋势 3大主流操作系统 macwindowslinux 我们 选择 linux 作为基础系统 为什么选择 黑乎乎的命令行界面呢&#xff1f;&#x1f914; GUI vs CLI 个人电脑 用图标和菜单组成 图形界面(GUI) Graphic User I…...

微服务1 springcloud学习笔记P1-P40

b微服务技术栈_哔哩哔哩_bilibili 文档资料: 链接&#xff1a;https://pan.baidu.com/s/1P_Ag1BYiPaF52EI19A0YRw?pwdd03r 提取码&#xff1a;d03r 一 了解微服务技术 二 Eureka (1) Eureka配置 (2) 注册user-service (3) 总结 Ribbon 负载均衡 (1) 流程 三 nacos配置管理…...

【页面】表格展示

展示 Dom <template><div class"srch-result-container"><!--左侧--><div class"left"><div v-for"(item,index) in muneList" :key"index" :class"(muneIndexitem.mm)?active:"click"pa…...

天池SQL训练营(六)-综合练习题-10道经典题目

如果你还没有学习过SQL训练营的以下知识&#xff0c;请查阅主页博文学习&#xff1a; Task 1 SQL基础&#xff1a;初识数据库与SQL-安装与基本介绍等 Task 2 SQL基础&#xff1a;查询与排序-select、运算符、聚合分组查询等 Task 3 SQL进阶&#xff1a;复杂查询方法-视图、子查…...

某校园报名sign解密

某校园报名sign解密 定位 看了下确实是md5标准算法&#xff0c;接下来就看下加密的明文了 最后分开看了下&#xff0c; sign md5(用户名 活动id 10位时间戳 keys)...

2024年安防视频监控行业将面临4大机遇和挑战

当前安防监控市场处于快速发展的阶段&#xff0c;市场不仅有传统的视频监控、门禁系统等单一功能的设备&#xff0c;还涌现出了一系列集成多种安防功能的综合系统。随着人工智能技术的发展&#xff0c;安防监控设备不仅可以对场所进行实时监控&#xff0c;还可以通过图像识别、…...

搞懂HashTable, HashMap, ConcurrentHashMap 的区别,看着一篇就足够了!!!

&#x1f6e9;️&#x1f6e9;️&#x1f6e9;️ 今天给大家分享的是 HashTable, HashMap, ConcurrentHashMap之间的区别&#xff0c;也是自己学习过程中的总结。 清风的CSDN博客 &#x1f6e9;️&#x1f6e9;️&#x1f6e9;️希望我的文章能对你有所帮助&#xff0c;有不足的…...

PostgreSQL 技术内幕(十二) CloudberryDB 并行化查询之路

随着数据驱动的应用日益增多&#xff0c;数据查询和分析的量级和时效性要求也在不断提升&#xff0c;对数据库的查询性能提出了更高的要求。为了满足这一需求&#xff0c;数据库引擎不断经历创新&#xff0c;其中并行执行引擎是性能提升的重要手段之一&#xff0c;逐渐成为数据…...

Vue学习计划-Vue2--Vue核心(七)生命周期

抛出问题&#xff1a;一进入页面就开启一个定时器&#xff0c;每隔1秒count就加1&#xff0c;如何实现 示例&#xff1a; <body> <div id"app">{{ n }}<button click"add">执行</button> </div><script>let vm new …...

前端知识笔记(三十四)———HBuilder的下载与使用(详细步骤)

一、HBuilder IDE的下载 HBuilder下载官网地址&#xff1a; 在地址栏中直接输入https://www.dcloud.io 或者直接点击下面的链接 DCloud - HBuilder、HBuilderX、uni-app、uniapp、5、5plus、mui、wap2app、流应用、HTML5、小程序开发、跨平台App、多端框架 进入官网&#x…...

stl容器

大部分容器的size的复杂度如下&#xff1a; std::vector&#xff1a; 时间复杂度为(1). std::deque&#xff1a; 时间复杂度为 O(1). 双端队列 std::list&#xff1a; 时间复杂度为 O(1)&#xff08;C11 及以后的版本&#xff09;。 std::forward_list&#xff1a; 时间复…...

android https 证书过期

有的时候 我们android https 证书过期 &#xff0c;或者使用明文等方式去访问服务器 可能会碰到类似的 问题 &#xff1a; javax.net.ssl.SSLHandshakeException: Chain validation failed java.security.cert.CertPathValidatorException: Response is unreliable: its validi…...

lv11 嵌入式开发 中断控制器14

目录 1 中断控制器 ​编辑 2 Exynos4412下的中断控制器 2.1 概述 2.2 特征 ​编辑 2.3 中断状态 2.4 中断类型 2.5 中断控制器GIC中断表 3 中断控制器寄存器详解 3.1 ICDDCR&#xff08;Interrupt Controller Distributor Control Register&#xff09; 3.2 ICDISER…...

IDEA 出现问题:Idea-操作多次commit,如何合并为一个并push解决方案

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…...

贝蒂的捣蛋小游戏~(C语言)

引言&#xff1a; 前面贝蒂已经给大家介绍了选择&#xff0c;循环结构~&#xff0c;今天贝蒂就基于这两种结构&#xff0c;为大家讲解一种捣蛋小游戏的设计思路和方法哦。 1.游戏要求 游戏要求&#xff1a; 1. 电脑⾃动⽣成1~100的随机数 2. 玩家猜数字&#xff0c;猜数字的过…...

c# 判断是否连接公网

有一个需求&#xff0c;软件需要在连接公网的状态下才能使用&#xff0c;否则弹出提示 我们判断一下网络不通情况 1.系统未开启网络&#xff1a;例如关掉了WIFI&#xff0c;拔掉网线 2.网络已连接无internet&#xff1a;连接了路由器&#xff0c;但路由器未连接外网 对于以上…...

unity 2d 入门 飞翔小鸟 场景延续(八)

1、新建c#脚本如下 代码&#xff0c;在前方生成生成自身图片并3s后销毁自身&#xff0c;在碰撞物体后小鸟死亡后不删除自身 using System.Collections; using System.Collections.Generic; using UnityEngine;public class CopyScene : MonoBehaviour { //要复制的对象public…...

scrapy介绍,并创建第一个项目

一、scrapy简介 scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 Scrapy 使用了Twisted异步网络框架&#xff0c;可以加快我们的下载速度。 Scrapy文档地址&#xff1a;http://scrapy-chs.readthedocs.io/z…...

Rust语言项目实战(九 - 完结) - 胜利与失败

回顾 在前面的章节中,我们已经实现了这个游戏中大部分的模块和功能,我们可以指挥我们的战机左右移动,并发射子弹;我们还创造了一堆的侵略者,从屏幕上方缓缓降落,试图到达屏幕的底部。 本章中,我们将对游戏的输赢作出最后的裁决,到底是我们的保卫者英勇无敌,还是侵略…...

【Linux系统编程】项目自动化构建工具make/Makefile

介绍&#xff1a; make和Makefile是用于编译和构建C/C程序的工具和文件。Makefile是一个文本文件&#xff0c;其中包含了编译和构建程序所需的规则和指令。它告诉make工具如何根据源代码文件生成可执行文件&#xff0c;里面保存的是依赖关系和依赖方法。make是一个命令行工具&a…...

harmony开发之Text组件的使用

TextInput、TextArea是输入框组件&#xff0c;通常用于响应用户的输入操作&#xff0c;比如评论区的输入、聊天框的输入、表格的输入等&#xff0c;也可以结合其它组件构建功能页面&#xff0c;例如登录注册页面。 图片来源黑马程序员 Text组件的使用&#xff1a; 文本显示组…...

using meta-SQL 使用元SQL 六

%Table Syntax %Table(recname) Description Use the %Table construct to return the SQL table name for the record specified with recname. 使用%Table构造返回使用recname指定的记录的SQL表名。 This construct can be used to specify temporary tables for runn…...

如何将浮点数点左边的数每三位添加一个逗号,如 12000000.11 转化为『12,000,000.11』

// 方法二 function format1(number) {return Intl.NumberFormat().format(number); } // 方法三 function format2(number) {return number.toLocaleString("en"); }...

朴素贝叶斯 贝叶斯方法

朴素贝叶斯 贝叶斯方法 背景知识 贝叶斯分类&#xff1a;贝叶斯分类是一类分类算法的总称&#xff0c;这类算法均以贝叶斯定理为基础&#xff0c;故统称为贝叶斯分类。先验概率&#xff1a;根据以往经验和分析得到的概率。我们用 P ( Y ) P(Y) P(Y)来代表在没有训练数据前假设…...

探索鸿蒙 TextInput组件

TextInput 根据组件名字&#xff0c;可以得知他是一个文本输出框。 声明代码&#x1f447; TextInput({placeholder?:ResourceStr,text?:ResourceStr}); placeholder: 就是提示文本&#xff0c;跟网页开发中的placeholder一样的 text&#xff1a;输入框当前的文本内容 特殊属…...