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

有名管道及其应用

创建FIFO文件

    1.通过命令: mkfifo + 文件名

    2.通过函数: mkfifo

    #include <sys/types.h>

    #include <sys/stat.h>

    int mkfifo(const char *pathname, mode_t mode);

    参数:

        -pathname:管道名称的路径

        -mode:文件的权限,和open的mode是一样的,是一个八进制的数

    返回值:

        成功返回0,失败返回-1,并设置错误号

有名管道的注意事项

    1.一个为只读而打开一个管道的进程会阻塞,直到另外一个进程为只写打开管道

    2.一个为只写而打开一个管道的进程会阻塞,直到另外一个进程为只读打开管道

    读管道:

        管道中有数据,read返回实际读到的字节数

        管道中无数据:

            管道写端被全部关闭,read返回0,(相当于读到文件末尾)

            写端没有被全部关闭,read阻塞等待

    写管道:

        管道读端被全部关闭,进程异常终止(收到一个SIGPIPE信号)

        管道读端没有全部关闭:

            管道已经满了,write会阻塞

            管道没有满,write将数据写入,并返回实际写入的字节数

有名管道实现简单版聊天功能

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<stdlib.h>
#include<fcntl.h>
#include<string.h>
int main() {//1.判断有名管道文件是否存在int ret = access("fifo1", F_OK);if(ret == -1) {//文件不存在printf("管道不存在,创建对应的有名管道\n");ret = mkfifo("fifo1", 0664);if(ret == -1) {perror("mkfifo");exit(0);}}ret = access("fifo2", F_OK);if(ret == -1) {//文件不存在printf("管道不存在,创建对应的有名管道\n");ret = mkfifo("fifo2", 0664);if(ret == -1) {perror("mkfifo");exit(0);}}//2.以只写的方式打开管道1int fdw = open("fifo1", O_WRONLY);if(fdw == -1) {perror("open");exit(0);}printf("打开fifo1成功,等待写入数据...\n");//3.以只读的方式打开管道2int fdr = open("fifo2", O_RDONLY);if(fdr == -1) {perror("open");exit(0);}printf("打开fifo2成功,等待读取数据...\n");char buf[128];//4.循环地写读数据//往管道写数据while(1) {memset(buf, 0, 128);//获取标准输入的数据fgets(buf, 128, stdin);//写数据ret = write(fdw, buf, strlen(buf));if(ret == -1) {perror("write");exit(0);}}//读管道数据while(1) {memset(buf, 0, 128);ret = read(fdr, buf, 128);if(ret <= 0) {perror("read");break;}printf("buf: %s\n", buf);}//5.关闭文件描述符close(fdw);close(fdr);return 0;
}
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<stdlib.h>
#include<fcntl.h>
#include<string.h>
int main() {//1.判断有名管道文件是否存在int ret = access("fifo1", F_OK);if(ret == -1) {//文件不存在printf("管道不存在,创建对应的有名管道\n");ret = mkfifo("fifo1", 0664);if(ret == -1) {perror("mkfifo");exit(0);}}ret = access("fifo2", F_OK);if(ret == -1) {//文件不存在printf("管道不存在,创建对应的有名管道\n");ret = mkfifo("fifo2", 0664);if(ret == -1) {perror("mkfifo");exit(0);}}//2.以只读的方式打开管道1int fdr = open("fifo1", O_RDONLY);if(fdr == -1) {perror("open");exit(0);}printf("打开fifo1成功,等待读取数据...\n");//3.以只写的方式打开管道2int fdw = open("fifo2", O_WRONLY);if(fdw == -1) {perror("open");exit(0);}printf("打开fifo2成功,等待写入数据...\n");char buf[128];//4.循环地读写数据//读管道数据while(1) {memset(buf, 0, 128);ret = read(fdr, buf, 128);if(ret <= 0) {perror("read");break;}printf("buf: %s\n", buf);}//往管道写数据while(1) {memset(buf, 0, 128);//获取标准输入的数据fgets(buf, 128, stdin);//写数据ret = write(fdw, buf, strlen(buf));if(ret == -1) {perror("write");exit(0);}}//5.关闭文件描述符close(fdw);close(fdr);return 0;
}

相关文章:

有名管道及其应用

创建FIFO文件 1.通过命令&#xff1a; mkfifo 文件名 2.通过函数: mkfifo #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode); 参数&#xff1a; -pathname&#xff1a;管道名称的路径 -mode&#xff1a;文件的权限&a…...

加州大学伯克利分校 计算机科学专业

加州大学伯克利分校 计算机科学专业 cs 61a cs 61b cs61c...

一个关于 i++ 和 ++i 的面试题打趴了所有人

前言 都说大城市现在不好找工作&#xff0c;可小城市却也不好招人。 我们公司招了挺久都没招到&#xff0c;主管感到有些心累。 我提了点建议&#xff0c;是不是面试问的太深了&#xff0c;在这种小城市&#xff0c;能干活就行。 他说自己问的面试题都很浅显&#xff0c;如果答…...

程序员的快乐如此简单

最近在GitHub上发起了一个关于Beego框架的小插件的开源仓库&#xff0c;这一举动虽然看似微小&#xff0c;但其中的快乐和意义却是无法用言语表达的。 Beego是一个开源的Go语言Web框架&#xff0c;它采用了MVC架构模式&#xff0c;并集成了很多常用的功能和中间件。小插件是指…...

浅谈云原生Cloud Native

目录 1.云原生是什么2.云原生与传统软件有什么区别3.云原生有哪些代表性的技术 1.云原生是什么 云原生&#xff08;Cloud Native&#xff09;是一种构建和运行应用程序的方法&#xff0c;可以充分利用云计算模型的优势。云原生是一种面向服务的架构&#xff08;SOA&#xff09…...

解决react报错“JSX 表达式必须具有一个父元素“

现象如下&#xff1a; 原因&#xff1a; 新插入的dom元素跟已有的dom元素平级了&#xff0c;必须创建一个共有的根元素 解决办法&#xff1a; 使用<> </>标签作为根元素&#xff0c;把所有子元素包裹起来 <> ....原代码 </> 问题解决&#xff01;…...

Spring学习笔记7 Bean的生命周期

Spring学习笔记6 Bean的实例化方式_biubiubiu0706的博客-CSDN博客 Spring其实就是一个管理Bean对象的工厂.它负责对象的创建,对象的销毁. 这样我们才可以知道在哪个时间节点上调用了哪个类的哪个方法,知道代码该写在哪里 Bean的生命周期之粗略5步 Bean生命周期的管理可以参考S…...

React 如何导出excel

在现代的Web开发中&#xff0c;数据导出是一个非常常见的需求。而在React应用中&#xff0c;我们经常需要将数据导出为Excel文件&#xff0c;以便用户可以轻松地在本地计算机上查看和编辑。本文将介绍如何在React应用中实现导出Excel文件的功能。 章节一&#xff1a;安装依赖 …...

Texlive2020 for win10 宏包更新

用命令提示符更新texlive的宏包,这个方法非常简单实用 1.以管理员身份打开命令提示符 2.系统自动选择镜像网站 tlmgr option repository ctan 3.更新宏包 tlmgr update --self --all 其中–self参数表示升级tlmgr本身,–all表示升级所有宏包,这样就可以将所有宏包更新了 4.列…...

Ps 在用鼠标滚轮缩放图片时,速度太快?

1.原因 在于安装了第三方鼠标优化软件Mos&#xff0c;它起着对第三方鼠标全局浏览效果的优化&#xff0c;使浏览更加顺滑&#xff0c;而不精确&#xff0c;消除了mac使用第三方鼠标浏览页面时的卡顿问题。这也使得像ps、ai这类软件&#xff0c;在进行页面缩放时&#xff0c;变得…...

基于docker进行Grafana + prometheus实现服务监听

基于docker进行Grafana Prometheus实现服务监听 Grafana安装Prometheus安装Jvm监控配置服务器主机监控(基础cpu&#xff0c;内存&#xff0c;磁盘&#xff0c;网络) Grafana安装 docker pull grafana/grafanamkdir /server/grafanachmod 777 /server/grafanadocker run -d -p…...

模型层及ORM介绍

模型层及ORM介绍 模型层 负责跟数据库之间进行通信 配置MySQL&#xff0c;下载MySQLclient 创建数据库 进入mysql数据库执行create database 数据库名 default charset utf8通常数据库名跟项目名保持一致settings.py里进行数据库的配置修改 DATABASES 配置项的内容&#x…...

QQ邮箱怎么设置SMTP接口服务器?

在现如今信息快速传递的时代&#xff0c;邮件已成为我们工作、学习和生活中必不可少的一部分。而作为每位用户必备的一款邮箱&#xff0c;QQ邮箱一直以其稳定、高效、安全的特点深受大家的青睐。但是你是否觉得每次发邮件都需要打开QQ邮箱网页&#xff0c;进行繁琐的操作很是麻…...

【操作系统笔记四】高速缓存

CPU 高速缓存 存储器的分层结构&#xff1a; 问题&#xff1a;为什么这种存储器层次结构行之有效呢&#xff1f; 衡量 CPU 性能的两个指标&#xff1a; 响应时间&#xff08;或执行时间&#xff09;&#xff1a;执行一条指令平均时间 吞吐量&#xff0c;就是 1 秒内 CPU 可以…...

uniapp获取openid

要获取用户的openid&#xff0c;需要使用微信小程序的登录API。以下是一个简单的示例代码&#xff1a; // 在page中引入wx-login组件 import wxLogin from /components/wx-loginexport default {components: { wxLogin },data() {return {openid: }},methods: {// wxLogin组件…...

测试工程师面试之设计测试用例

以下的问题答案&#xff0c;仅供参考&#xff0c;如小伙伴们有更好的答案&#xff0c;欢迎大家评论区留言&#xff0c;谢谢大家 测试工程师面试之设计测试用例 1、请说一说简单用户界面登陆过程都需要做哪些分析2、 请对此系统设计测试用例&#xff1a;一个系统&#xff0c;多个…...

html页面仿word文档样式(vue页面也适用)

目录 文章title&#xff1a; 标题&#xff1a; 正文&#xff1a; 完整代码&#xff1a; 页面效果&#xff1a; 文章title&#xff1a; <div><h3 style"display: flex;justify-content: center; align-items: center; color: #000;">实验室招新报名公…...

如何在控制台打印sql语句

步骤一&#xff1a; log4j2.xml中做以下配置 <logger name"xxx.infrastructure.mysql.mapper"level"debug" additivity"false"><appender-ref ref"Console"/></logger>步骤二&#xff1a;IDEA下载Free Mybatis Plu…...

【Vue3 源码解析】reactive 全家桶

// 泛型约束&#xff1a;只能传入引用类型 export function reactive<T extends object>(target: T): UnwrapNestedRefs<T> // 判断只读&#xff0c;否则创建reactive响应式对象 export function reactive(target: object) {// if trying to observe a readonly pr…...

目标检测YOLO实战应用案例100讲-基于YOLO的遥感目标检测(续)

目录 3.4 YOLOv3 3.5 YOLOv4 3.6 YOLOv5 改进的YOLOv4算法 4.1 Triple Loss损失函数的应用...

PHP 8.9原生异步I/O终极调优清单(含12项基准测试指标、9类典型负载适配矩阵)

第一章&#xff1a;PHP 8.9原生异步I/O的核心演进与设计哲学PHP 8.9并未实际发布——截至2024年&#xff0c;PHP官方最新稳定版本为PHP 8.3&#xff0c;且PHP核心开发团队已明确表示**不会在PHP 8.x系列中引入原生异步I/O运行时**。该标题所指的“PHP 8.9”属于虚构版本&#x…...

48tools:一站式多平台视频下载与直播录制高效解决方案

48tools&#xff1a;一站式多平台视频下载与直播录制高效解决方案 【免费下载链接】48tools 48工具&#xff0c;提供公演、口袋48直播录源&#xff0c;公演、口袋48录播下载&#xff0c;封面下载&#xff0c;B站直播抓取&#xff0c;B站视频下载&#xff0c;A站直播抓取&#x…...

第二章:从零构建你的首个量化交易策略

1. 初识量化交易与MindGo平台 第一次接触量化交易时&#xff0c;我完全被那些专业术语吓到了。什么"阿尔法因子"、"多因子模型"、"高频策略"&#xff0c;听起来就像天书一样。直到后来发现MindGo这个平台&#xff0c;才真正体会到量化交易也可以…...

AI时代,网络安全为何是人类最后壁垒?网安专业究竟有多重要?

网络安全专业&#xff1a;AI时代唯一被AI“反向增强”的人类堡垒 核心论断&#xff1a;网络安全不是AI的替代对象&#xff0c;而是AI的校准器、约束阀与免疫系统。当AI在其他领域扮演“执行者”&#xff0c;它在网络空间中必须是“被监管者”——而监管它的&#xff0c;只能是具…...

从SVM到LSTM:我的谣言检测模型优化踩坑实录(附PHEME/微博数据集对比)

从SVM到LSTM&#xff1a;我的谣言检测模型优化踩坑实录 去年夏天接手社交媒体谣言检测项目时&#xff0c;我完全没料到这个看似标准的文本分类任务会如此充满挑战。团队最初的想法很简单&#xff1a;用传统机器学习方法快速搭建基线&#xff0c;再逐步升级到深度学习模型。但当…...

笑不活了!学生自研反外挂系统,结果反手把自己“误封”了|从翻车到封神全过程

笑不活了&#xff01;学生自研反外挂系统&#xff0c;结果反手把自己“误封”了&#xff5c;从翻车到封神全过程 文章目录笑不活了&#xff01;学生自研反外挂系统&#xff0c;结果反手把自己“误封”了&#xff5c;从翻车到封神全过程事情起因&#xff1a;我想写个反外挂&…...

字节跳动发布AI编程神器TraeCN

目录 一、核心定位与功能 二、安装与初始化 三、基础使用流程 1. 打开 / 创建项目 2. 编码与 AI 辅助 3. SOLO 模式&#xff08;全自动开发&#xff09;Trae CN 4. 运行与预览 四、使用技巧&#xff08;提效&#xff09; 五、适合人群 Trae CN&#xff08;简称 Trae&#xff09…...

为什么92%的.NET团队在.NET 9发布30天内未启用低代码?揭秘微软未公开的Runtime沙箱限制与IL修剪兼容性断层

第一章&#xff1a;低代码在.NET 9生态中的战略定位与现实落差.NET 9 将“开发者生产力”列为首要设计目标&#xff0c;官方路线图明确将低代码能力纳入平台级支持范畴——包括对 Microsoft.Extensions.LowCode 命名空间的首次正式引入、Blazor Hybrid 中内建的可视化组件绑定引…...

Qwen3.5-9B实战教程:WebSocket流式响应+前端实时渲染优化方案

Qwen3.5-9B实战教程&#xff1a;WebSocket流式响应前端实时渲染优化方案 1. 项目概述与核心能力 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型&#xff0c;在多个领域展现出强大的能力&#xff1a; 强逻辑推理&#xff1a;能够处理复杂的逻辑问题&#xff0c;适合需要深度…...

ARM 架构 JuiceFS 性能优化:基于 MLPerf 的实践与调优乙

Qt是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本笔记将重点介绍QSpinBox数值微调组件的常用方法及灵活应用。…...