如何从system()获取自定义返回值

时间:2015-05-07 13:41:25

标签: linux return-value

我需要在程序之间传递1个值。就我而言,我通过调用系统(“SimpleProgram”)在另一个程序中运行(非常简单)程序。

有没有办法传递SimpleProgram返回的1个值(整数)。 “返回123”和“退出(123)”都不起作用。

有没有优雅的方法来传递这样的价值? (我不想写和读取外部文件)

编辑:

语言是C ++,编程是在带有Angstrom发行版的BeagleBone上完成的。

retCode = system(“cd / home / martin / uart / temp / xml_parser&& ./xmldom”);

2 个答案:

答案 0 :(得分:1)

请注意system(3)的手册页有关返回代码的内容:

  

错误时返回的值为-1(例如fork(2)失败),以及   否则返回命令的状态。          后一种返回状态采用wait(2)中指定的格式。因此,命令的退出代码将          是WEXITSTATUS(状态)。

所以你几乎就在那里。如果你有一个简单的程序返回123,正如你所说:

int main(int argc, char **argv) {
    return 123;
}

然后您可以使用system(3)运行它,并使用WEXITSTATUS()查看其返回代码:

#include <iostream>
using namespace std;

#include <stdlib.h>

int main(int argc, char **argv) {
    int rc = system(argv[1]);
    cout << WEXITSTATUS(rc) << '\n';
}

命名第一个程序return123和第二个system

$ ./system ./return123
123

如果您不使用WEXITSTATUS()而只是直接打印rc,则会收到错误的值。

答案 1 :(得分:0)

执行此操作的标准方法是使用UNIX管道。

如果它只是一个黑客,你也可以只使用二进制返回值,但在任何一种情况下,你都必须使用execve()而不是system()。