溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

C++中怎么執(zhí)行LinuxBash命令

發(fā)布時(shí)間:2021-07-06 17:39:06 來(lái)源:億速云 閱讀:245 作者:Leah 欄目:編程語(yǔ)言

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)C++中怎么執(zhí)行LinuxBash命令,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

方法一:fopen()函數(shù)

#include<cstdlib>#include<string>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int N = 300;void Test(void){  char line[N];  FILE *fp;  string cmd = "ps -ef| grep java | awk '{print $2}'";  ////引號(hào)內(nèi)是你的linux指令  // 系統(tǒng)調(diào)用  const char *sysCommand = cmd.data();  if ((fp = popen(sysCommand, "r")) == NULL) {    cout << "error" << endl;    return;  }  while (fgets(line, sizeof(line)-1, fp) != NULL){    cout << line ;  }  pclose(fp);}int main(){  Test();  return 0;}

注意:

popen函數(shù)原型: FILE * popen( const char * command,const char * type);

popen()會(huì)調(diào)用fork()產(chǎn)生子進(jìn)程,然后從子進(jìn)程中調(diào)用ps -ef| grep java | awk ‘{print $2}'來(lái)執(zhí)行參數(shù)command的指令。參數(shù)type可使用“r”代表讀取,“w”代表寫(xiě)入。popen()會(huì)建立管道連到子進(jìn)程的標(biāo)準(zhǔn)輸出設(shè)備或標(biāo)準(zhǔn)輸入設(shè)備,然后返回一個(gè)文件指針。

隨后進(jìn)程便可利用此文件指針來(lái)讀取子進(jìn)程的輸出設(shè)備或是寫(xiě)入到子進(jìn)程的標(biāo)準(zhǔn)輸入設(shè)備中。此外,所有使用文件指針(FILE*)操作的函數(shù)也都可以使用,除了fclose()以外。

在編寫(xiě)具SUID/SGID權(quán)限的程序時(shí)請(qǐng)盡量避免使用popen(),popen()會(huì)繼承環(huán)境變量,通過(guò)環(huán)境變量可能會(huì)造成系統(tǒng)安全的問(wèn)題。

或者,更簡(jiǎn)單的:

方法二:system()函數(shù)

#include <cstdlib>  int main()  {      system("ps -ef| grep java");    //括號(hào)內(nèi)是你的linux指令    return 0;  }

注意:system()會(huì)調(diào)用fork()產(chǎn)生子進(jìn)程,由子進(jìn)程來(lái)調(diào)用”ps -ef| grep java ” 這個(gè)string來(lái)執(zhí)行參數(shù)string字符串所代表的命令,此命令執(zhí)行完后隨即返回原調(diào)用的進(jìn)程。所以相比于直接執(zhí)行 ps -ef| grep java , 用這個(gè)system()調(diào)用會(huì)多一個(gè)進(jìn)程id。

在編寫(xiě)具有SUID/SGID權(quán)限的程序時(shí)請(qǐng)勿使用system(),system()會(huì)繼承環(huán)境變量,通過(guò)環(huán)境變量可能會(huì)造成系統(tǒng)安全的問(wèn)題。

上述就是小編為大家分享的C++中怎么執(zhí)行LinuxBash命令了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI