从 C++ 程序在 Linux 中运行另一个程序
Posted
技术标签:
【中文标题】从 C++ 程序在 Linux 中运行另一个程序【英文标题】:Run Another Program in Linux from a C++ Program 【发布时间】:2012-02-25 14:17:27 【问题描述】:好的,我的问题是这样的。假设我有一个简单的 C++ 代码:
#include <iostream>
using namespace std;
int main()
cout << "Hello World" << endl;
return 0;
现在假设我有一个想在我的程序中运行的程序,称之为 prog。在终端中运行它可以通过以下方式完成:
./prog
有没有办法从我的简单 C++ 程序中做到这一点?比如
#include <iostream>
using namespace std;
int main()
./prog ??
cout << "Hello World" << endl;
return 0;
非常感谢任何反馈。
【问题讨论】:
***.com/questions/478898/… 的可能重复项 @hopia,不是重复的。你所指的是一个关于system()
的高级用法的问题;这张海报只需要知道该功能的存在。
【参考方案1】:
您想要system()
库调用;见system(3)。例如:
#include <cstdlib>
int main()
std::system("./prog");
return 0;
当然,确切的命令字符串取决于系统。
【讨论】:
如何获取新进程的 pid? @Gil404:PID 是一个 Unix 概念,并非所有操作系统都有它。如果需要,请使用 POSIXfork
和 exec
,或您的操作系统的等效项。【参考方案2】:
你也可以使用popen
#include <stdio.h>
int main(void)
FILE *handle = popen("./prog", "r");
if (handle == NULL)
return 1;
char buf[64];
size_t readn;
while ((readn = fread(buf, 1, sizeof(buf), handle)) > 0)
fwrite(buf, 1, readn, stdout);
pclose(handle);
return 0;
【讨论】:
【参考方案3】:你可以使用系统命令:
system("./prog");
【讨论】:
【参考方案4】:试试system(3):
system("./prog");
【讨论】:
在您可以使用这样的系统调用: http://www.cplusplus.com/reference/clibrary/cstdlib/system/
如果您使用用户输入作为参数,请小心,这是产生一些意想不到的后果的好方法。擦洗一切!
通常,系统调用可以被解释为错误的形式。
【讨论】:
以上是关于从 C++ 程序在 Linux 中运行另一个程序的主要内容,如果未能解决你的问题,请参考以下文章
从 Mono 上运行的 C# 进程运行 C++ 应用程序。运行检测器错误