C++:为什么std :: system("exit 1")返回256?

Lin*_*umz 5 c++ stl

我想在我的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;
}
Run Code Online (Sandbox Code Playgroud)

在我的Linux机器上,这会产生:

0
256
0
256
512
768
1024
Run Code Online (Sandbox Code Playgroud)

似乎所有大于0的退出代码都乘以256.这种行为的原因是什么?这是可移植的UNIX操作系统吗?

Lin*_*umz 6

答案是:

  int status = std::system("exit 3");
  std::cout << WEXITSTATUS(status) << std::endl;
Run Code Online (Sandbox Code Playgroud)

哪个回报:

3
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请访

在C++中返回system()函数调用的值,用于运行Python程序