номера ошибок pthread: инвертированы или нет?

Глядя на документацию для pthread_* функций, таких как pthread_rwlock_destroy и многих других, это как сформулирована документация:

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

В случае успеха функции pthread_rwlock_destroy() и pthread_rwlock_init() должны возвращать ноль; в противном случае должен быть возвращен номер ошибки, указывающий на ошибку.

Проверки ошибок [EBUSY] и [EINVAL], если они реализованы, действуют так, как если бы они выполнялись непосредственно в начале обработки функции и вызывали возврат ошибки до изменения состояния блокировки чтения-записи, заданной rwlock.

Это говорит о том, что в случае ошибки должен быть возвращен номер ошибки. Затем он объясняет коды ошибок:

ОШИБКИ

Функция pthread_rwlock_destroy() может завершиться ошибкой, если:

[EBUSY]
Реализация обнаружила попытку уничтожить объект, на который ссылается rwlock, когда он заблокирован.
...

В котором не упоминается, возвращается ли EBUSY или -EBUSY. Почти везде я вижу, что когда функции возвращают код ошибки, они возвращают -E*****.

Означает ли это, что pthread_* функции также следуют этому соглашению? Должен ли я проверять возвращаемое значение по самому -EBUSY или EBUSY?

По той же теме, будут ли они хранить EBUSY в errno или -EBUSY?


person Shahbaz    schedule 19.03.2013    source источник
comment
EBUSY != -EBUSY .. Я не понимаю, откуда берутся отрицательные числа.   -  person    schedule 19.03.2013
comment
Путаница с деталями реализации ядра.   -  person R.. GitHub STOP HELPING ICE    schedule 19.03.2013
comment
@pst, EBUSY != -EBUSY, поэтому вам нужно знать, возвращается ли EBUSY или -EBUSY. Обычно коды ошибок определяются положительными, а затем возвращаются со знаком минус после них. Итак... отрицательные числа появляются там, где они ставят -? Или я совсем не так понял ваш комментарий?   -  person Shahbaz    schedule 20.03.2013
comment
Вы не должны проверять ни >0, ни <0, но !=0... если это не удалось, значит, это ошибка! ;-)   -  person alk    schedule 20.03.2013
comment
@alk, вздох... Да. Затем вы хотите проверить, почему это не удалось, то есть вы должны проверить возвращаемое значение на EBUSY или -EBUSY. Я спрашивал, какой правильный.   -  person Shahbaz    schedule 21.03.2013


Ответы (1)


Они возвращают положительные коды ошибок. Ничто, видимое приложениям, не возвращает отрицательные коды ошибок. Это деталь реализации ядра.

person R.. GitHub STOP HELPING ICE    schedule 19.03.2013
comment
Were Они означает pthread_* семейство функций в деталях. Большинство системных вызовов просто возвращает 0 в случае успеха и -1 в случае ошибки, при этом errno устанавливается в положительное значение из набора E* кодов ошибок. - person alk; 19.03.2013
comment
Забавно, я искал return EBUSY и return EINVAL в github (в кодах), и я действительно вижу, что pthread_* функции сами возвращают значения E*. Однако все остальное, похоже, возвращает -E*. В то же время все остальное как-то связано с ядром! - person Shahbaz; 20.03.2013