C/C++ 程序中调用命令行命令并获取命令行输出结果
2020-06-06 07:49
6292 查看
在 c/c++ 程序中,可以使用 system()函数运行命令行命令,但是只能得到该命令行的 int 型返回值,并不能获得显示结果。例如system(“ls”)只能得到0或非0,如果要获得ls的执行结果,则要通过管道来完成的。首先用popen打开一个命令行的管道,然后通过fgets获得该管道传输的内容,也就是命令行运行的结果。
在linux上运行的例子如下:
-
void executeCMD(const char *cmd, char *result) { char buf_ps[1024]; char ps[1024]={0}; FILE *ptr; strcpy(ps, cmd); if((ptr=popen(ps, "r"))!=NULL) { while(fgets(buf_ps, 1024, ptr)!=NULL) { strcat(result, buf_ps); if(strlen(result)>1024) break; } pclose(ptr); ptr = NULL; } else { printf("popen %s error\n", ps); } }
在这段代码中,参数cmd为要执行的命令行,result为命令行运行结果。输入的cmd命令最好用... 2>&1 的形式,这样将标准错误也读进来。
一个完整的例子是:
-
#include <stdlib.h> #include <stdio.h> #include <unistd.h> int main() { FILE* fp = NULL; char cmd[512]; sprintf(cmd, "pwd 2>/dev/null; echo $?"); if ((fp = popen(cmd, "r")) != NULL) { fgets(cmd, sizeof(cmd), fp); pclose(fp); } //0 成功, 1 失败 printf("cmd is %s\n", cmd); return 0; }
有关在 windows 上实现的过程及源码详见:C程序中获得命令行输出结果
相关文章推荐
- 【c/c++】如何调用【linux】shell命令行命令并获取命令行的输出内容
- 【转】C#执行命令行程序/命令并获取输出结果
- 【c/c++】如何调用【Window】cmd命令行命令并获取命令行的输出内容
- VC调用CMD命令通过控制台管道获取输出结果
- C++使用system带参数调用exe程序并把结果输出到文件
- Linux下的C程序如何调用系统命令,并获取系统的输出信息到C程序中
- 工作问题积累(九)C++:实现从注册表中获取程序安装路径并调用exe文件
- Delphi下调用CMD命令并获取结果
- Windows命令行调用微软cl编译C/C++程序
- 调用命令行程序并获取返回信息
- 获取DOS命令输出结果
- 获取命令行程序的输出
- c++里的system()函数调用系统命令如何获取打印信息
- Delphi通过管道执行外部命令行程序(cmd)并获取返回结果
- linux系统下,c++程序,调用system命令失败,分析过程
- Java调用命令行并获取执行结果
- C/C++程序调用shell命令
- .Net ( C# ) 调用控制台程序并取得输出结果
- java调用shell命令并获取执行结果