2

我想从 c++ 运行另一个程序,将其输出重定向到文件并返回其结果代码。但是,如果我无法运行程序(路径不正确等),我想知道。

这是我的问题,我怎样才能:一次重定向文件,获取程序的结果代码,获取系统的错误?

  • System(): 返回结果,容易重定向,但是无法知道结果是系统错误还是应用程序结果
  • posix_spawn(): 我知道是否有系统错误,但是如何获取应用结果代码?

请注意,我不控制已执行应用程序的代码使用 Windows(对不起...)OpenProcess()功能很容易,我需要的是OpenProcess()在 linux 下。

谢谢

4

2 回答 2

1

您将需要使用该posix_spawn功能。

系统调用将waitpid帮助您获取退出代码。

看到这个问题

pid_t waitpid(pid_t pid, int *status, int options);
于 2013-03-06T19:01:56.467 回答
1

您需要做的是非常匹配标准 fork-exec 调用加上文件重定向:

int pid = fork();
if( pid == -1 ) {
   // process error here
}

if( pid == 0 ) {
   int fd = open( "path/to/redirected/output", ... );
   ::close( 1 );
   dup2( fd, 1 );
   ::close( fd );
   exec...( "path to executable", ... );
   // if we are here there is a problem
   exit(123);
}
int status = 0;
waitpid( pid, &status, 0 );
// you get exit status in status

通过 exec... 我的意思是 exec 函数系列之一(键入“man 3 exec”以获取信息),选择一个更适合您的函数。如果您需要重定向错误输出,请执行相同的操作,但使用描述符 2。您可能希望将 waitpid() 放入循环中并检查它是否没有被信号中断。

于 2013-03-06T19:13:02.047 回答