我想在我的C ++程序中运行一个小的UNIX shell脚本,我想捕获shell脚本的退出代码。但是std :: system返回的值不是我预期的值:
#include <iostream>
#include <cstdlib>
int main()
{
std::cout << std::system("echo Hello >/dev/null") << std::endl;
std::cout << std::system("which does_not_exisit 2>/dev/null") << std::endl;
std::cout << std::system("exit 0") << std::endl;
std::cout << std::system("exit 1") << std::endl;
std::cout << std::system("exit 2") << std::endl;
std::cout << std::system("exit 3") << std::endl;
std::cout << std::system("echo exit 4 | bash") << std::endl;
return 0;
}
在我的Linux机器上,这会产生:
0
256
0
256
512
768
1024
似乎所有大于0的退出代码都乘以256.这种行为的原因是什么?这可以在UNIX之类的操作系统中移植吗?
答案 0 :(得分:6)
答案是:
int status = std::system("exit 3");
std::cout << WEXITSTATUS(status) << std::endl;
返回:
3
欲了解更多信息,请访问:
Return value of system() function call in C++, used to run a Python program