C++執(zhí)行Linux Bash命令的方法
方法一: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}'"; ////引號內是你的linux指令 // 系統(tǒng)調用 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()會調用fork()產(chǎn)生子進程,然后從子進程中調用ps -ef| grep java | awk ‘{print $2}'來執(zhí)行參數(shù)command的指令。參數(shù)type可使用“r”代表讀取,“w”代表寫入。popen()會建立管道連到子進程的標準輸出設備或標準輸入設備,然后返回一個文件指針。
隨后進程便可利用此文件指針來讀取子進程的輸出設備或是寫入到子進程的標準輸入設備中。此外,所有使用文件指針(FILE*)操作的函數(shù)也都可以使用,除了fclose()以外。
在編寫具SUID/SGID權限的程序時請盡量避免使用popen(),popen()會繼承環(huán)境變量,通過環(huán)境變量可能會造成系統(tǒng)安全的問題。
或者,更簡單的:
方法二:system()函數(shù)
#include <cstdlib> int main() { system("ps -ef| grep java"); //括號內是你的linux指令 return 0; }
注意:system()會調用fork()產(chǎn)生子進程,由子進程來調用”ps -ef| grep java ” 這個string來執(zhí)行參數(shù)string字符串所代表的命令,此命令執(zhí)行完后隨即返回原調用的進程。所以相比于直接執(zhí)行 ps -ef| grep java , 用這個system()調用會多一個進程id。
在編寫具有SUID/SGID權限的程序時請勿使用system(),system()會繼承環(huán)境變量,通過環(huán)境變量可能會造成系統(tǒng)安全的問題。
以上這篇C++執(zhí)行Linux Bash命令的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
C語言數(shù)據(jù)結構之平衡二叉樹(AVL樹)實現(xiàn)方法示例
這篇文章主要介紹了C語言數(shù)據(jù)結構之平衡二叉樹(AVL樹)實現(xiàn)方法,結合實例形式分析了C語言平衡二叉樹的相關定義與使用技巧,需要的朋友可以參考下2018-01-01