在Linux中从C++程序运行另一个程序

21

好的,我的问题是这样的。假设我有一个简单的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;
}

非常感谢您的任何反馈。


1
可能是重复的问题https://dev59.com/6XRB5IYBdhLWcg3w4bGv - hopia
1
@hopia,不是重复的问题。你指出的是关于system()的高级用法的问题;这位发帖者只是想知道这个函数的存在。 - J. C. Salomon
5个回答

24

您需要使用system()库调用;请参阅system(3)。例如:

#include <cstdlib>

int main() {
   std::system("./prog");
   return 0;
}

当然,确切的命令字符串将取决于系统。


我怎样才能获取新进程的pid? - Gil404
1
@Gil404:PID 是 Unix 的概念,并非所有操作系统都有它。如果你需要它,可以使用 POSIX 的 forkexec,或者你的操作系统等效的命令。 - J. C. Salomon

9
您也可以使用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;
}

5
您可以使用系统命令:
```

您可以使用系统命令:

```
system("./prog");

4

在 <cstdlib> 中。也许可以在该系统上加上 std::。 - Captain Giraffe

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接