2

We have a C++ program, sometimes this program need to execute a user defined batch/shell/ant script. We are not able to control how this script runs. Is there a way to get the return code from C++ program?

Something like: exec a script.sh > status.tmp ?

We need to support both Windows and Linux.

Any ideas?

4

3 回答 3

8

另一个简单的方法是使用 marco WEXITSTATUS 获得回报。与使用 waitpid 调用(在基于 Unix 的系统中)获取子进程的返回值的方式几乎相同。

这是示例程序。我有一个 C/C++ 程序和一个简单的 bash 脚本。

示例 bash 脚本

#!/bin/bash
echo "I am in Script"
exit 5;

示例 C/C++ 程序

int i, ret = system("./b.sh 2>&1 > /dev/null");
i=WEXITSTATUS(ret);
printf("My val= %d\n",i);

输出

./a.out 
My val= 5

如果您想要更高级的方法来从脚本中获得多个返回代码或想要一个交互式会话,那么也许您应该使用popen

希望这可以帮助。

于 2013-12-11T18:36:34.097 回答
0

在linux中只需使用

int ret=system("myshellscrtipt.sh");

因为脚本的返回值是系统函数的返回值。在 Windows 中我不知道是否有类似的功能。如果你使用 Qt 工具包,你可以做这样的事情

QProcess process;

process.start( "yourShellCommand", QStringList( args );

这将是真正的跨平台..

于 2013-09-14T06:19:16.533 回答
0

在 bash 中,状态码存储在一个特殊的变量中:

C:/myprogram.exe
echo $?
于 2013-12-11T18:50:12.593 回答