• 正文
    • 管道具體操作
    • 結(jié)語
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

使用管道進行讀取執(zhí)行命令的返回值

02/13 10:18
285
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

我們經(jīng)常會使用system()函數(shù)執(zhí)行命令,那樣是因為我們不需要要執(zhí)行后返回的數(shù)據(jù),如果我們需要返回的數(shù)據(jù)呢?今天介紹一種可以得到我們返回數(shù)據(jù)的操作。

歡迎關(guān)注微信公眾號:羽林君,或者添加作者個人微信:become_me

管道具體操作

管道(pipe)

管道是一種最基本的IPC機制,作用于有血緣關(guān)系的進程之間,完成數(shù)據(jù)傳遞,可用于具有親緣關(guān)系進程間的通信,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關(guān)系進程間的通信;

基于管道細節(jié)使用我就不多做描述了,這篇文章描述的很詳細,大家可以參考https://www.cnblogs.com/biyeymyhjob/archive/2012/11/03/2751593.html

代碼

我直接附我使用的代碼,主要邏輯執(zhí)行了cat /sys/class/sweep_robot/radar/radar_gpio_control命令,檢查該IO是否為ON的狀態(tài)。

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如下:

其中我把管道讀取回來的數(shù)據(jù)轉(zhuǎn)換成立std::string,并使用find函數(shù)進行搜索,大家可以按照自己要求分別使用find 、find_first_of 、find_last_of 、find_first_not_of 、compare其中適合自己的函數(shù)。

結(jié)語

這就是我自己的一些使用pipe讀取執(zhí)行命令返回值的使用分享。如果大家有更好的想法和需求,也歡迎大家加我好友交流分享哈。

作者:良知猶存,白天努力工作,晚上原創(chuàng)公號號主。公眾號內(nèi)容除了技術(shù)還有些人生感悟,一個認真輸出內(nèi)容的職場老司機,也是一個技術(shù)之外豐富生活的人,攝影、音樂 and 籃球。關(guān)注我,與我一起同行。

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

一個程序員,喜歡寫文章,還喜歡打籃球,也喜歡吉他鋼琴的駁雜之人。日常更新自己,分享包括但不限于C/C++、嵌入式、物聯(lián)網(wǎng)、Linux等編程學(xué)習(xí)筆記,同時,公眾號內(nèi)包含大量的學(xué)習(xí)資源。歡迎關(guān)注,一同交流學(xué)習(xí),共同進步!