命名管道实现传递数据到二进制文件

一 前言:

        在做项目的过程中,一般来说我们的信息输入是有固定的端口/来源的,但是在当前的越来越快的开发节奏下,往往会出现输入源还未完全确定的情况下需要我们先实现功能逻辑,信号接受端后面再对接。或者数据接受端和功能的逻辑同步开发的情况下,为了方便快捷的将数据传递到可执行文件中去,我们可以使用命名管道实现将我们的基本测试数据写入到程序中,进而能先展示我们的功能或者调试我们的程序,或者做一个简单的demo去展示团队的快捷开发能力进而拿下项目。

二 思路和代码:

1.bash脚本:

        使用命名管道实现传递数据本质还是在本地新建一个文件,然后让二进制文件去不停地读取这个文件即可。所以我们的思路就可以直接聚焦到文件的创建和文件的读取。ok我们将数据的传递过程和文件的创建过程都放在bash脚本里面去执行。

        首先我们要写入的数据是信号+值的方式,所以需要我们再运行脚本的时候识别是否有两个参数,其次我们不能每次写入的时候都创建一次命名管道,虽然这样也可以但是完全没有必要。我们创建之前识别下文件是否存在即可。那么我们的bash脚本的内容如下;

#!/usr/bin/bash#检查参数的数量
if [ "$#" -ne 2 ]; thenecho "need two paramater"exit 1
fi# 检查命名管道是否存在,如果不存在则创建
if [ ! -p ./my_pipe ]; thenecho "Creating named pipe ./my_pipe"mkfifo ./my_pipe
fi#接受参数并且注入到命名通道中去
echo "$1 $2"
echo "$1 $2" > ./my_pipe

        我们首先识别是否有两个参数的输入,如果没有则直接报错,然后我们再判断my_pipe文件是否存在,不存在我们再进行创建,最后我们通过echo命令将数据写入到文件中即可。

2.读取的代码

        代码部分就比较简单了,我们直接使用fstream进行文件的读取即可。

#include <iostream>
#include <fstream>
#include <unistd.h>
int main(){const std::string fife_name = "./my_pipe";while(1){std::fstream file(fife_name);if(!file.is_open()){std::cout<<"coun't find file\n";break;}std::string line;while(std::getline(file,line)){std::cout<<"get msg is "<<line<<"\n";}usleep(1000*1000);}
}

        这里我们设置1s读取一次,然后输出来。这个地方要注意记得生成可执行文件,然后我们先运行脚本再执行可执行文件即可。

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

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

相关文章

VSCode知名主题带毒 安装量900万次

目前微软已经从 Visual Studio Marketplace 中删除非常流行的主题扩展 Material Theme Free 和 Material Theme Icons&#xff0c;微软称这些主题扩展包含恶意代码。 统计显示这些扩展程序的安装总次数近 900 万次&#xff0c;在微软实施删除后现在已安装这些扩展的开发者也会…

如何快速的解除oracle dataguard

有些时候&#xff0c;我们为了使oracle dg的standby库另做他用&#xff0c;需要解除oracle dataguard数据同步。我本地因为standby库存储出现故障&#xff0c;导致dg存在问题&#xff0c;故需要解除。今天&#xff0c;我们通过使用部分命令&#xff0c;实现dg的快速解除。 1&a…

Windows系统编程(七)HotFixHook

InoolineHook需要读写两次内存&#xff08;先HOOK&#xff0c;再还原&#xff09;&#xff0c;这种Hook方式&#xff0c;性能比较低&#xff0c;具有局限性。今天所讲的HotFixHOOK&#xff08;热补丁&#xff09;是InlineHook的升级版 Win32 API特殊性 Win32API的实现代码有这…

Python Web应用开发之Flask框架——基础

一、前言 在即将开启的 Flask 学习之旅中,为了能够顺利掌握并运用 Flask 进行 Web 开发,您需要具备一定的基础知识,同时了解相应的运行环境。 需要你具备的知识:Python 编程语言、HTML、CSS、HTTP协议、数据库(如:MySQL、MongoDB) 本文所使用的环境:操作系统Windows…

TCP通讯与基于C#TCP通讯,跨窗收发消息Demo

TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。它广泛应用于互联网中的数据通信&#xff0c;如网页浏览、文件传输、电子邮件等。以下是TCP通信的基本概念和工作原理&#xff1a; 1. TCP的特点 面向连接&#xff1a;通信前…

【有源码】仿DeepSeek问答网站+SpringBoot+VUE3+对接DeepSeek API

今天带来一款优秀的项目&#xff1a;仿DeepSeek问答网站。 功能和官网差不多&#xff0c;也有历史上下文&#xff0c;流失对话等。 本文介绍了系统功能与部署安装步骤&#xff0c;如果您有任何问题&#xff0c;也请联系学姐&#xff0c;偶现在是经验丰富的程序员&#xff01; …

Ubuntu20.04双系统安装及软件安装(七):Anaconda3

Ubuntu20.04双系统安装及软件安装&#xff08;七&#xff09;&#xff1a;Anaconda3 打开Anaconda官网&#xff0c;在右侧处填写邮箱&#xff08;要真实有效&#xff01;&#xff09;&#xff0c;然后Submit。会出现如图示的Success界面。 进入填写的邮箱&#xff0c;有一封Ana…

洛谷 P2142 高精度减法(详解)c++

题目链接&#xff1a;P2142 高精度减法 - 洛谷 1.题目 2.算法原理 解法:模拟列竖式计算的过程 先用字符串读入&#xff0c;然后拆分每一位&#xff0c;逆序放进数组中利用数组&#xff0c;模拟列竖式减法的过程 在这两步之前要多加一步&#xff0c;在模拟解法的过程&#…

在 MyBatis 中,若数据库字段名与 SQL 保留字冲突解决办法

在 MyBatis 中&#xff0c;若数据库字段名与 SQL 保留字冲突&#xff0c;可通过以下方法解决&#xff1a; 目录 一、使用转义符号包裹字段名二、通过别名映射三、借助 MyBatis-Plus 注解四、全局配置策略&#xff08;辅助方案&#xff09;最佳实践与注意事项 一、使用转义符号…

ThreadLocal解析

1. ThreadLocal的定义与核心作用 ThreadLocal是Java中用于实现线程局部变量的工具类。它为每个线程提供独立的变量副本&#xff0c;使得每个线程访问的是自己的数据&#xff0c;从而避免多线程环境下的资源共享问题&#xff0c;实现线程隔离。 例如&#xff0c;解决SimpleDate…

Kafka零拷贝

Kafka为什么适用零拷贝&#xff0c;其他存储结构不适用&#xff1f; Kafka 采用的是日志存储模型&#xff0c;数据通常是顺序写入、顺序读取&#xff0c;并且它的消费模式是 “读完即走”&#xff08;一次性读取并发送给消费者&#xff09;&#xff0c;这与零拷贝的特性完美匹…

微服务组件详解——sentinel

1.启动sentinel&#xff1a; 下载jar sentinel-dashboard-1.8.0.jar 使用以下命令直接运行 jar 包&#xff08;JDK 版本必须≥ 1.8&#xff09;&#xff1a; java -Dserver.port9999 -jar D:\sentinel-dashboard-1.8.0.jar 控制台访问地址&#xff1a;http://localhost:9999…

AI数据分析:deepseek生成SQL

在当今数据驱动的时代&#xff0c;数据分析已成为企业和个人决策的重要工具。随着人工智能技术的快速发展&#xff0c;AI 驱动的数据分析工具正在改变我们处理和分析数据的方式。本文将着重介绍如何使用 DeepSeek 进行自动补全SQL 查询语句。 我们都知道&#xff0c;SQL 查询语…

动态规划01背包问题系列一>目标和

目录 题目分析及优化&#xff1a;状态表示&#xff1a;状态转移方程&#xff1a;初始化&#xff1a;填表顺序&#xff1a;返回值&#xff1a;代码呈现&#xff1a;优化&#xff1a;代码呈现&#xff1a; 题目分析及优化&#xff1a; 状态表示&#xff1a; 状态转移方程&#xf…

Linux 基础---sudo权限 修改文件所属人、用户所属组

sudo 概念&#xff1a;让普通用户使用管理员权限执行一些操作&#xff08;root&#xff09; 在命令前加上sudo 即可 修改文件所属人、所属组

HMC7043和HMC7044芯片配置使用

一,HMC7043芯片 MC7043独特的特性是对14个通道分别进行独立灵活的相位管理。所有14个通道均支持频率和相位调整。这些输出还可针对50 Ω或100 Ω内部和外部端接选项进行编程。HMC7043器件具有RF SYNC功能,支持确定性同步多个HMC7043器件,即确保所有时钟输出从同一时钟沿开始…

【动手实验】TCP半连接队列、全连接队列实战分析

本文是对 从一次线上问题说起&#xff0c;详解 TCP 半连接队列、全连接队列 这篇文章的实验复现和总结&#xff0c;借此加深对 TCP 半连接队列、全连接队列的理解。 实验环境 两台腾讯云服务器 node2&#xff08;172.19.0.12&#xff09; 和 node3&#xff08;172.19.0.15&am…

Springboot整合WebSocket+Redis以及微信小程序如何调用

一、 Springboot整合WebSocket 1. 引入socket依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>引入依赖后需要刷新maven,Websocket的版本默认跟随S…

影刀RPA开发拓展--SQL常用语句全攻略

前言 SQL&#xff08;结构化查询语言&#xff09;是数据库管理和操作的核心工具&#xff0c;无论是初学者还是经验丰富的数据库管理员&#xff0c;掌握常用的 SQL 语句对于高效管理和查询数据都至关重要。本文将系统性地介绍最常用的 SQL 语句&#xff0c;并为每个语句提供详细…

大模型训练微调技术介绍

大模型训练微调技术是人工智能领域中的一项重要技术&#xff0c;旨在通过少量特定领域的数据对预训练模型进行进一步训练&#xff0c;使其更好地适应具体任务或应用场景。以下是关于大模型训练微调技术的详细介绍&#xff1a; 1. 微调技术的定义与意义 微调&#xff08;Fine-…