时间:2021-05-20
方法一: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++执行Linux Bash命令的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
和之前C++执行LinuxBash命令的方法一样,Python依然支持system调用和popen()函数来执行linuxbash命令。方法一:system调用
ubuntu下source、sh、bash、./执行脚本的区别1.source命令用法: sourceFileName 作用:在当前bash环境下读取并执行
linux下执行shell命令有两种方法在当前shell中执行shell命令在当前shell中产生一个subshell,在subshell中执行shell命令1
Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。以下是几种shell版本,bash是默认的:
Ruby的安装注意点OSX或linux较好不同版本的实现:c++、C、java本次CRuby安装方法linux或OSX都有预装包管理器(apt、yum、brew