Где я могу увидеть список функций, которые взаимодействуют с errno?

В книге «Язык программирования C» это говорит:

"Many of the functions in the library set status indicators when error or end of file occur. These indicators may be set and tested explicitly. In addition, the integer expression errno (declared in <errno.h>) may contain an error number that gives further information about the most recent error."

Где я могу увидеть список этих функций?

 Rob Wells12 июл. 2009 г., 20:49
@ Leif, круто, что ты работаешь через K & R. Я только что закончил делать то же самое в течение нескольких дней во время отпуска. (-:

Ответы на вопрос(6)

Почти все функции библиотеки posix могут устанавливать errno, если происходит ошибка, то есть когда функция возвращает -1. Исключением являются функции потоков, поскольку установка одной глобальной переменной ошибки из нескольких потоков была бы очень опасной. В случае успеха они возвращают 0, в противном случае код ошибки (этот код совместим с errno, поэтому вы можете использовать для него функции strerror и perror).

 13 авг. 2010 г., 13:50
Я никогда не говорил, что ошибка не связана с темой. Функции потоков не устанавливаются в любом случае.
 11 авг. 2010 г., 19:03
errno указано, что это зависит от потока. -1 за дезинформацию по этому вопросу.
 13 июл. 2009 г., 00:18
Есть ли на самом деле реализация POSIX, которая имеет потоки, но не имеет локального потока?

A proper question might be what are the values errno можно получить и что каждый из них означает. Вы можете увидеть их в спискеintro(2).

Решение Вопроса

Стандарт говорит об этомerrno:

The value of errno is zero at program startup, but is never set to zero by any library function. The value of errno may be set to nonzero by a library function call whether or not there is an error, provided the use of errno is not documented in the description of the function in this International Standard.

Что говорит мне, что любая библиотечная функция можетerrno в любом случае это нравится, кроме:

it can't set errno to 0 it can't do what it likes if the standard explicitly says otherwise

Обратите внимание, что стандарт предлагает следующее в сноске:

Thus, a program that uses errno for error checking should set it to zero before a library function call, then inspect it before a subsequent library function call. Of course, a library function can save the value of errno on entry and then set it to zero, as long as the original value is restored if errno's value is still zero just before the return.

Как отмечено в других ответах, это обычно для функций, которые не в стандарте, чтобы установитьerrno также.

@ Adam, как сказал Нил, любая функция может быть скомпилирована с errno.h и установлена errno. По определению невозможно перечислить все утилиты, которые были скомпилированы таким образом, чтобы использовать функциональность ядра errno.

Тем не менее, существует несколько способов сообщения об ошибках пользователю. Использование errno - это всего лишь одно.

Вы должны предположить, что любая функция может устанавливать errno, а не только те, что в стандартной библиотеке. Поэтому список будет немного бессмысленным.

 12 июл. 2009 г., 23:38
Вопрос был не о какой-либо функции - речь шла о стандартных функциях. Стандарт документирует функции в библиотеке, которые изменяют errno. То, что бессмысленно, так это обработка функций, которые гарантированно не изменяют ошибки, как если бы они могли.
 12 июл. 2009 г., 23:49
@ Динго Вы читали ответ Майкла Берра?
 12 июл. 2009 г., 21:13
@Adam Какой каламбур это будет? Я полагаю, что я упускаю что-то очевидное и грубое?
 22 авг. 2009 г., 21:51
@Neil: Фильтр Баттерворта - это классическая электронная схема, которую преподают старшекурсникам EE в рамках их математической дедовщины. Извините, что разочаровал, если вы ожидали больше грубости. :-) @Dingo: Согласитесь, что эти функции задокументированы и (мы надеемся) соответствуют стандартам. Моя точка зрения заключалась в том, что я никогда не сталкивался с каноническим списком функций, в которых для errno установлено значение «Полезные значения».
 12 июл. 2009 г., 20:41
Я не согласен, хотя жизнь, несомненно, будет проще по-вашему! В настоящее время я борюсь с некоторыми встроенными библиотеками, которые возвращают сообщения, подобные & quot; Произошла ошибка: errno = 0 & quot; Так что, как указывает ОП, если вы простите непреодолимое наказание за свое имя, было бы полезно иметь возможность отфильтровать те функции, которые по ошибке не устанавливают полезные значения.

Вы можете использовать свой любимый редактор и & quot; Найти в файлах ... & quot; искать файлы, содержащиеerrno ключевое слово.

 12 июл. 2009 г., 21:32
Я вас не понимаю. Во всяком случае, я имел в виду поиск файлов библиотеки (* .c, * .cpp).
 12 июл. 2009 г., 21:25
И жирные шрифты занимают больше места на диске?

Ваш ответ на вопрос