這期內容當中小編將會給大家帶來有關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命令了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創新互聯行業資訊頻道。
文章名稱:C++中怎么執行LinuxBash命令-創新互聯
文章來源:http://vcdvsql.cn/article34/cscipe.html
成都網站建設公司_創新互聯,為您提供自適應網站、網站設計公司、全網營銷推廣、網站設計、網站營銷、ChatGPT
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯