-7

如何让一个 c++ 程序在 Linux 中打开另一个程序?它类似于在 Windows 中使用 shell 命令吗?

4

5 回答 5

3

有一个标准的 C 函数,system()它运行一个命令并等待它完成。

有一个标准的 POSIX 函数,popen()它在新进程中运行命令并返回连接到新进程的管道。管道通常是单向的,它既可以读也可以写(一些平台,例如 BSD 允许双向管道)

或者您可以手动执行此操作,方法是使用 POSIX 函数fork()派生一个新进程,然后使用其中一个exec()家族来用不同的程序替换进程映像。

我认为迄今为止最简单的首选方法是使用我的Pstreams库。这会在新进程中运行命令,并使用与 iostreams 兼容的接口将管道连接到它的任何stdin,和 。与 &相比,这为您提供了更少的控制(但更简单),但比.stdoutstderrforkexecpopen

于 2013-01-15T22:12:06.573 回答
1

您可以使用exec函数之一:http: //www.kernel.org/doc/man-pages/online/pages/man3/exec.3.html

于 2013-01-15T22:11:01.863 回答
0

您可以使用system()标准库调用,它与 Windows Shell 命令非常相似。要获得更多控制,您可以使用exec()及其变体。

于 2013-01-15T22:10:34.207 回答
0

使用execl()功能。它适用于 C 语言,但应该可以正常工作。有关铁道部信息和一些示例,请查看以下内容: http: //www.gidforums.com/t-3369.html

于 2013-01-15T22:14:53.870 回答
0

通常,您首先使用功能fork启动另一个进程,然后exec将新进程正在运行的程序(即要启动另一个程序的程序)与您要启动的程序交换。代码大致如下所示:

pid_t pid = fork();
switch(pid) {
   case 0: // we are the child process
      exec( name of exectuable ); //exact signautre differs
      break;
   case -1: //An error ocurred
      std::cout << "error\n";
}

Fork 克隆您正在运行的进程。它们绝对相同,甚至运行相同的程序。唯一的区别是返回的 pid。调用进程获取孩子的pid,孩子得到零。switch 语句决定了其中的哪一个。Exec 将进程正在运行的程序替换为另一个程序。据我所知,它只保留文件描述符。Exec 有几个关于参数和搜索路径的变体,在手册页中查找它们。

于 2013-01-15T22:17:50.063 回答