C linux进程中return语句的真实故事
我试图为这个简单的代码配置输出。但我无法理解。 预期产量为C linux进程中return语句的真实故事,c,linux,process,operating-system,C,Linux,Process,Operating System,我试图为这个简单的代码配置输出。但我无法理解。 预期产量为 int main() { int val = 5; if(fork()) wait(&val); val++; printf("%d\n", val); return val; } 6 7 预期产量为 int main() { int val = 5; if(fork()) wait(&v
int main()
{
int val = 5;
if(fork())
wait(&val);
val++;
printf("%d\n", val);
return val;
}
6
7
预期产量为
int main()
{
int val = 5;
if(fork())
wait(&val);
val++;
printf("%d\n", val);
return val;
}
6
7
但是linux给了我
6
1537
请告诉我这个代码背后发生了什么。
我可以预测返回语句一定有问题。
非常感谢您的详细解释。您只需更改函数的参数值wait()
int main()
{
int val = 5;
if(fork())
wait(NULL);
val++;
printf("%d\n", val);
return val;
}
您的输出为1537,因为status()函数会更改您的变量值
提取wait()的man,其中status表示函数的参数
如果status不为NULL,wait()和waitpid()将状态信息存储在它所指向的int中
祝你好运。阅读会帮助你理解。简而言之:实际返回码只在8个最低位。为什么你不期望6/7?最低位?1537是0x601@JoachimPileborg@alk从链接的手册页面,关于
WEXITSTATUS
宏:“返回子级的退出状态。这包括状态参数的最低有效8位…”(强调我的)。关于返回值,您的答案似乎比我更详细。有人知道这个值到底发生了什么吗?为什么是1537?在这段代码中,需要更改的不仅仅是“wait”语句。这是因为fork()可能会失败,返回-1,这将满足'if'语句,然后父级将等待一个不存在的子级