C++中怎么执行LinuxBash命令

发布时间:2021-07-06 17:39:06 作者:Leah
来源:亿速云 阅读:250

这期内容当中小编将会给大家带来有关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命令了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. 命令执行漏洞
  2. LFI 命令执行

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++

上一篇:C++中怎么利用函数动态创建二维数组

下一篇:c++中如何使用inline内联函数

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》