Где я могу увидеть список функций, которые взаимодействуют с errno? - PullRequest
8 голосов
/ 12 июля 2009

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

"Многие функции в библиотеке устанавливают индикаторы состояния при возникновении ошибки или конца файла. Эти Индикаторы могут быть установлены и протестированы в явном виде. Кроме того, целочисленное выражение errno (объявлено в <errno.h>) может содержать номер ошибки, который дает дополнительную информацию о наиболее недавняя ошибка. "

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

Ответы [ 6 ]

6 голосов
/ 12 июля 2009

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

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

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

  • он не может установить errno на 0
  • он не может делать то, что ему нравится, если в стандарте прямо указано иное

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

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

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

5 голосов
/ 12 июля 2009

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

1 голос
/ 12 июля 2009

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

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

1 голос
/ 12 июля 2009

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

0 голосов
/ 12 июля 2009

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

0 голосов
/ 12 июля 2009

Правильный вопрос может быть, каковы значения errno можно узнать и что значит каждый из них. Вы можете увидеть их в списке intro(2).

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