从 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 概念,并非所有操作系统都有它。如果需要,请使用 POSIX forkexec,或您的操作系统的等效项。【参考方案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");

【讨论】:

中。并且可能会在该系统上打一个 std:: 。【参考方案5】:

您可以使用这样的系统调用: http://www.cplusplus.com/reference/clibrary/cstdlib/system/

如果您使用用户输入作为参数,请小心,这是产生一些意想不到的后果的好方法。擦洗一切!

通常,系统调用可以被解释为错误的形式。

【讨论】:

以上是关于从 C++ 程序在 Linux 中运行另一个程序的主要内容,如果未能解决你的问题,请参考以下文章

从服务 linux c++ 打开应用程序

从 Mono 上运行的 C# 进程运行 C++ 应用程序。运行检测器错误

如何使用 C++ 在 Linux 中移动文件

如何从 C++ 代码引发事件并在另一个进程的 C# 代码中调用处理程序?

在c ++中使用回调异步运行linux命令

将程序 (.exe) 作为线程执行 - Window C++