您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關C++中怎么執行LinuxBash命令,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
方法一:fopen()函數
#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}'"; ////引號內是你的linux指令 // 系統調用 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函數原型: FILE * popen( const char * command,const char * type);
popen()會調用fork()產生子進程,然后從子進程中調用ps -ef| grep java | awk ‘{print $2}'來執行參數command的指令。參數type可使用“r”代表讀取,“w”代表寫入。popen()會建立管道連到子進程的標準輸出設備或標準輸入設備,然后返回一個文件指針。
隨后進程便可利用此文件指針來讀取子進程的輸出設備或是寫入到子進程的標準輸入設備中。此外,所有使用文件指針(FILE*)操作的函數也都可以使用,除了fclose()以外。
在編寫具SUID/SGID權限的程序時請盡量避免使用popen(),popen()會繼承環境變量,通過環境變量可能會造成系統安全的問題。
或者,更簡單的:
方法二:system()函數
#include <cstdlib> int main() { system("ps -ef| grep java"); //括號內是你的linux指令 return 0; }
注意:system()會調用fork()產生子進程,由子進程來調用”ps -ef| grep java ” 這個string來執行參數string字符串所代表的命令,此命令執行完后隨即返回原調用的進程。所以相比于直接執行 ps -ef| grep java , 用這個system()調用會多一個進程id。
在編寫具有SUID/SGID權限的程序時請勿使用system(),system()會繼承環境變量,通過環境變量可能會造成系統安全的問題。
上述就是小編為大家分享的C++中怎么執行LinuxBash命令了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。