exec返回255

时间:2011-06-23 18:39:14

标签: c unix

我的代码在Mac上运行,我从exec获得255返回代码。 以下是代码:

    ret = execvp(pArgs[0], pArgs);  

    if (ret < 0) 
{
        ret = errno;
        exit(ret);
        return false;
    }
else if (processId < 0) 
{
    // fork() failed    
    return false;
    } 
else if(Wait)
{
    // forked successfuly so wait for exit
    if(waitpid(processId, &childstatus, 0) == processId)
    {
        // codesign command terminted, get return code
        if(WIFEXITED(childstatus))
        {
            if(pCmdRetStatus != NULL)
                *pCmdRetStatus = WEXITSTATUS(childstatus);
        }

    }   
}

有关为何255的任何想法?基本上是一个hdiutil调用,很多次,我得到255。

3 个答案:

答案 0 :(得分:12)

UNIX (and therefore Mac OS X) exit statuses被强制进入0-255无符号范围。

因此,从您对-1的调用中execvp的返回值将在C代码中处理为-1,但由于the rules of the exit() function specification而在操作系统级别将变为255。请考虑以下示例:

bash> bash
bash2> exit -1
bash> echo $? # The exit status of the last command (bash2)
255

答案 1 :(得分:1)

execvp在出错时返回一个整数(-1)(并设置errno,你应该检查/打印(提示:perror)),然后传递给exit。退出真的只知道EXIT_FAILUREEXIT_SUCCESS,但它通常只是将值传递给操作系统(通常可以处理0-127 / 0-255,但不要指望它)。

答案 2 :(得分:0)

exec 唯一可能的返回值 s 为0,为-1。我猜测变量ret的类型是错误的(unsigned char而不是int),因此-1被转换为模数256到255。