gpt4 book ai didi

c++ - WEXITSTATUS 始终返回 0

转载 作者:行者123 更新时间:2023-11-30 17:46:48 26 4
gpt4 key购买 nike

我正在 fork 一个进程并使用 execl 运行 wc 命令。现在,在正确的参数下,它运行良好,但是当我给出错误的文件名时,它会失败,但在这两种情况下,返回值WEXITSTATUS(状态)始终为 0。

我相信我所做的事情有问题,但我不确定问题是什么。阅读手册页和 Google 建议我应该根据状态代码获取正确的值。

这是我的代码:

#include <iostream>
#include <unistd.h>

int main(int argc, const char * argv[])
{
pid_t pid = fork();
if(pid <0){
printf("error condition");
} else if(pid == 0) {
printf("child process");
execl("/usr/bin/wc", "wc", "-l", "/Users/gabbi/learning/test/xyz.st",NULL);
printf("this happened");
} else {
int status;
wait(&status);

if( WIFEXITED( status ) ) {
std::cout << "Child terminated normally" << std::endl;
printf("exit status is %d",WEXITSTATUS(status));
return 0;
} else {
}
}
}

最佳答案

如果您向 execl() 提供不存在的文件名作为第一个参数,则会失败。如果发生这种情况,程序将离开而不返回任何指定值。因此返回默认值0

您可以像这样修复示例:

#include <errno.h>

...

int main(int argc, const char * argv[])
{
pid_t pid = fork();
if(pid <0){
printf("error condition");
} else if(pid == 0) {
printf("child process");
execl(...); /* In case exec succeeds it never returns. */
perror("execl() failed");
return errno; /* In case exec fails return something different then 0. */
}
...

关于c++ - WEXITSTATUS 始终返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19153046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com