Exec возвращая 255 - PullRequest
       0

Exec возвращая 255

2 голосов
/ 23 июня 2011

Мой код работает на Mac, и я получаю код возврата 255 от exec. Ниже приведен код:

    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 ]

12 голосов
/ 23 июня 2011

Состояния выхода UNIX (и, следовательно, Mac OS X) переводятся в диапазон 0-255 без знака.

Таким образом, возвращаемое значение -1 из вашего вызова execvp будет обрабатываться как -1 в вашем коде C, но станет 255 на уровне операционной системы из-за правил exit() спецификация функции . Рассмотрим следующий пример:

bash> bash
bash2> exit -1
bash> echo $? # The exit status of the last command (bash2)
255
1 голос
/ 23 июня 2011

execvp возвращает целое число (-1) при ошибке (и устанавливает errno, который вы должны проверить / распечатать (подсказка: perror)), который вы передаете exit. Exit действительно знает только о EXIT_FAILURE и EXIT_SUCCESS, но обычно он просто передает значение в ОС (которая обычно может обрабатывать 0-127 / 0-255, но не рассчитывает на это).

0 голосов
/ 23 июня 2011

Единственное возможное возвращаемое значение с для exec равно 0, а равно -1. Я предполагаю, что тип переменной ret неправильный (unsigned char вместо int), и, таким образом, -1 преобразуется по модулю 256 в 255.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...