Linux C語言呼叫system命令並獲取命令的返回值
阿新 • • 發佈:2019-02-04
思路:popen開啟,命令執行完後,對fp進行讀取,讀到output引數裡面。
注意:size不要太大。一般64,128夠用。用1024或者4028,會出現段錯誤,棧報錯。
popen()可以執行shell命令,並讀取此命令的返回值;
popen()函式通過建立一個管道,呼叫fork()產生一個子程序,執行一個shell以執行命令來開啟一個程序。可以通過這個管道執行標準輸入輸出操作。這個管道必須由pclose()函式關閉,而不是fclose()函式(若使用fclose則會產生殭屍程序)。
pclose()函式關閉標準I/O流,等待命令執行結束,然後返回shell的終止狀態。
如果shell不能被執行,則pclose()返回的終止狀態與shell已執行exit一樣。
static int get_system_output(char *cmd, char *output, int size)
{
FILE *fp=NULL;
fp = popen(cmd, "r");
if (fp)
{
if(fgets(output, size, fp) != NULL)
{
if(output[strlen(output)-1] == '\n')
output[strlen(output)-1 ] = '\0';
}
pclose(fp);
}
return 0;
}
memset( &cmd, 0x00, sizeof(cmd));
snprintf(cmd, sizeof(cmd), "grep \"%s\" %s | cut -d ' ' -f 1", client_mac, net_arp_file);
my_printf(LOG_MODE_LEVEL_1, "[##lin##]%s(%d) cmd:%s\n",__FUNCTION__,__LINE__, cmd);
get_system_output(cmd, client_online_tmp, 64 );
my_printf(LOG_MODE_LEVEL_1, "[##lin##]%s(%d) client_online_tmp:%s\n",__FUNCTION__,__LINE__, client_online_tmp);