如何在 C++/Linux 中执行外部命令?
- 2024-10-28 08:37:00
- admin 原创
- 95
问题描述:
我只是想知道在 C++ 中执行外部命令的最佳方法是什么,以及如果有的话我该如何获取输出?
编辑:我想我必须说我是这个世界的新手,所以我想我需要一个可行的示例。例如,我想执行如下命令:
ls -la
我该怎么做?
解决方案 1:
使用该popen
功能。
示例(不完整,生产质量代码,无错误处理):
FILE* file = popen("ls", "r");
// use fscanf to read:
char buffer[100];
fscanf(file, "%100s", buffer);
pclose(file);
解决方案 2:
举个例子:
#include <stdio.h>
int main() {
FILE * f = popen( "ls -al", "r" );
if ( f == 0 ) {
fprintf( stderr, "Could not execute
" );
return 1;
}
const int BUFSIZE = 1000;
char buf[ BUFSIZE ];
while( fgets( buf, BUFSIZE, f ) ) {
fprintf( stdout, "%s", buf );
}
pclose( f );
}
解决方案 3:
popen
它确实能完成你想要的工作,但它也有一些缺点:
它会在您正在执行的命令上调用一个 shell(这意味着您需要清除任何用户提供的命令字符串的污染)
它只能在一个方向上工作,您既可以向子进程提供输入,也可以读取其输出。
如果您想要调用子进程并提供输入和捕获输出,那么您必须执行以下操作:
int Input[2], Output[2];
pipe( Input );
pipe( Output );
if( fork() )
{
// We're in the parent here.
// Close the reading end of the input pipe.
close( Input[ 0 ] );
// Close the writing end of the output pipe
close( Output[ 1 ] );
// Here we can interact with the subprocess. Write to the subprocesses stdin via Input[ 1 ], and read from the subprocesses stdout via Output[ 0 ].
...
}
else
{ // We're in the child here.
close( Input[ 1 ] );
dup2( Input[ 0 ], STDIN_FILENO );
close( Output[ 0 ] );
dup2( Output[ 1 ], STDOUT_FILENO );
execlp( "ls", "-la", NULL );
}
当然,您可以execlp
根据需要用任何其他 exec 函数替换。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD