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

一 前言:

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

二 思路和代码:

1.bash脚本:

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

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

#!/usr/bin/bash

#检查参数的数量
if [ "$#" -ne 2 ]; then
    echo "need two paramater"
    exit 1
fi

# 检查命名管道是否存在,如果不存在则创建
if [ ! -p ./my_pipe ]; then
    echo "Creating named pipe ./my_pipe"
    mkfifo ./my_pipe
fi

#接受参数并且注入到命名通道中去
echo "$1 $2"
echo "$1 $2" > ./my_pipe

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

2.读取的代码

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

#include 
#include 
#include 
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 "<

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

你可能感兴趣的:(c++,bash)