使用管道进行读取执行命令的返回值

背景

我们经常会使用system()函数执行命令,那样是因为我们不需要要执行后返回的数据,如果我们需要返回的数据呢?今天介绍一种可以得到我们返回数据的操作。

作者:良知犹存

转载授权以及围观:欢迎关注微信公众号:羽林君

或者添加作者个人微信:become_me


管道具体操作

管道(pipe)

管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递,可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;

基于管道细节使用我就不多做描述了,这篇文章描述的很详细,大家可以参考https://www.cnblogs.com/biyeymyhjob/archive/2012/11/03/2751593.html

代码

我直接附我使用的代码,主要逻辑执行了cat /sys/class/sweep_robot/radar/radar_gpio_control命令,检查该IO是否为ON的状态。

bool ChecklidarGpio(void)
{
	bool ret = false;
	char buf[33] = {0};
	std::string get_msg;

	FILE* sta = NULL;
	sta = popen("cat /sys/class/lidar/radar/radar_gpio_control","r");

	fgets(buf,sizeof(buf),sta);
	PRINTF("lidar",  kWarn,"sta:%s",buf);
	get_msg = buf;

	int n = 0;
	if((n = get_msg.find("ON")) != string::npos)
	{
		LOG("lidar",  kWarn, ""<< n << ","<< get_msg.substr(n));
		ret = true;
	}
	pclose(sta);
	return ret;
}

int main()
{

	bool gpio_sta = ChecklidarGpio();
		PRINTF("lidar",  kWarn,"lidarGpio sta:%d",gpio_sta);
		if(!gpio_sta)// 1s 启动一次
		{
			lidarPmGpio('1');
		}
}

测试log如下:


其中我把管道读取回来的数据转换成立std::string,并使用find函数进行搜索,大家可以按照自己要求分别使用find 、find_first_of 、find_last_of 、find_first_not_of 、compare其中适合自己的函数。

结语

这就是我自己的一些使用pipe读取执行命令返回值的使用分享。如果大家有更好的想法和需求,也欢迎大家加我好友交流分享哈。


作者:良知犹存,白天努力工作,晚上原创公号号主。公众号内容除了技术还有些人生感悟,一个认真输出内容的职场老司机,也是一个技术之外丰富生活的人,摄影、音乐 and 篮球。关注我,与我一起同行。

                              ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

推荐阅读

【1】jetson nano开发使用的基础详细分享

【2】Linux开发coredump文件分析实战分享

【3】CPU中的程序是怎么运行起来的 必读

【4】cartographer环境建立以及建图测试

【5】设计模式之简单工厂模式、工厂模式、抽象工厂模式的对比

本公众号全部原创干货已整理成一个目录,回复[ 资源 ]即可获得。

posted @ 2022-11-02 20:26  良知犹存  阅读(65)  评论(0编辑  收藏  举报