我们经常会使用system()函数执行命令,那样是因为我们不需要要执行后返回的数据,如果我们需要返回的数据呢?今天介绍一种可以得到我们返回数据的操作。
管道是一种最基本的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读取执行命令返回值的使用分享。如果大家有更好的想法和需求,也欢迎大家加我好友交流分享哈。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8