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)生子進(jìn)程,然后從子進(jìn)程中調(diào)用ps -ef| grep java | awk ‘{print $2}'來執(zhí)行參數(shù)command的指令。參數(shù)type可使用“r”代表讀取,“w”代表寫入。popen()會建立管道連到子進(jìn)程的標(biāo)準(zhǔn)輸出設(shè)備或標(biāo)準(zhǔn)輸入設(shè)備,然后返回一個文件指針。
隨后進(jìn)程便可利用此文件指針來讀取子進(jìn)程的輸出設(shè)備或是寫入到子進(jìn)程的標(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)生子進(jìn)程,由子進(jìn)程來調(diào)用”ps -ef| grep java ” 這個string來執(zhí)行參數(shù)string字符串所代表的命令,此命令執(zhí)行完后隨即返回原調(diào)用的進(jìn)程。所以相比于直接執(zhí)行 ps -ef| grep java , 用這個system()調(diào)用會多一個進(jìn)程id。
在編寫具有SUID/SGID權(quán)限的程序時請勿使用system(),system()會繼承環(huán)境變量,通過環(huán)境變量可能會造成系統(tǒng)安全的問題。
以上這篇C++執(zhí)行Linux Bash命令的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++ 設(shè)置控制臺(命令行)窗口 光標(biāo)位置,及前背景顏色
這篇文章主要介紹了C++ 設(shè)置控制臺(命令行)窗口 光標(biāo)位置,及前背景顏色,需要的朋友可以參考下2019-04-04
C++瓦片地圖坐標(biāo)轉(zhuǎn)換的實現(xiàn)詳解
常見的瓦片地圖有矩形、菱形、正六邊形幾種。此文章主要討論菱形瓦片,也就是大家常說的2.5D,斜45度瓦片地圖。比如《紅警2》、《帝國時代2》都是采用這種技術(shù)2022-09-09
C語言中pthread_exit和pehread_join的使用
pthread_exit用于強(qiáng)制退出一個線程,pthread_join用于阻塞等待線程退出,獲取線程退出狀態(tài),本文主要介紹了C語言中pthread_exit和pehread_join函數(shù)的使用,具有一定的參考價值,感興趣的可以了解一下2024-02-02

