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

