我想启动一个脚本并在 C++ 中获取退出状态。但我注意到系统命令的退出状态总是左移 8 位。为什么系统函数会这样做?
示例代码:
#include <iostream>
using namespace std;
int main()
{
int exit_code_0 = system("exit 0") >> 8;
int exit_code_1 = system("exit 1") >> 8;
int exit_code_2 = system("exit 2") >> 8;
int exit_code_3 = system("exit 3") >> 8;
int exit_code_4 = system("exit 4") >> 8;
int exit_code_255 = system("exit 255")>> 8;
cout<<"Exit code was: " << exit_code_0 <<", Expected: 0"<< endl;
cout<<"Exit code was: " << exit_code_1 <<", Expected: 1"<< endl;
cout<<"Exit code was: " << exit_code_2 <<", Expected: 2"<< endl;
cout<<"Exit code was: " << exit_code_3 <<", Expected: 3"<< endl;
cout<<"Exit code was: " << exit_code_4 <<", Expected: 4"<< endl;
cout<<"Exit code was: " << exit_code_255 <<", Expected: 255"<< endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
检测结果:
Exit code was: 0, Expected: 0
Exit code was: 1, Expected: 1
Exit code was: 2, Expected: 2
Exit code was: 3, Expected: 3
Exit code was: 4, Expected: 4
Exit code was: 255, Expected: 255
Run Code Online (Sandbox Code Playgroud)
int*_*jay 10
在 C 和 C++ 标准中,system返回实现定义的值。
在 POSIX 系统中,返回值包含不同值的组合,可以用宏提取。要获得程序的退出状态,您可以使用WEXITSTATUS(return_value),它在您的系统上被定义为右移 8 位。低 8 位包含其他值(例如,让您确定程序是否正常退出或由于信号而退出,等等。)
您应该使用读取返回值
WEXITSTATUS(code)
Run Code Online (Sandbox Code Playgroud)
https://man7.org/linux/man-pages/man3/system.3.html