Должен ли я использовать "fd == -1" или "fd <0", чтобы проверить наличие неверного дескриптора файла? - PullRequest
0 голосов
/ 25 февраля 2019

Если у меня есть функция, которая принимает файловый дескриптор, и она хочет защитно проверить, действителен ли fd, следует ли проверять через if (fd >= 0) {...} или if (fd != -1) {...}?Системные вызовы Linux, такие как open (2) и dup (2) , по-видимому, возвращают -1 при сбое, и большая часть кода, который я видел, инициализирует fds в -1 перед использованием.

Прав ли я, что нет значимых отрицательных значений fd, кроме -1?Отклонение всех отрицательных fd кажется более надежным, но разве это просто распространяет недоразумение, что ожидается большой отрицательный fd?

1 Ответ

0 голосов
/ 25 февраля 2019

Файловые дескрипторы POSIX являются неотрицательными целыми числами. Даже -1 недопустимо в качестве файлового дескриптора.И не все функции, создающие новые файловые дескрипторы, возвращают нефайловый дескриптор -1 в случае ошибки - pipe является контрпримером, который не использует этот тип внутриполосной сигнализации.

Я склонен использовать сравнения с нулем вместо -1 в основном потому, что они приводят к несколько более компактному машинному коду.(Это относится к возвращаемым значениям ошибок и ситуациям, где -1 используется для обозначения отсутствия дескриптора открытого файла.) Компилятор обычно не может выполнить преобразование самостоятельно.Большинство архитектур могут выполнять (подписанное) сравнение регистра с нулем более эффективно, чем сравнение с -1.Некоторые из них объединили команды тестирования и ветвления для нулевых значений, или они могут выполнить сравнение, не забивая регистр или не кодируя константу в инструкции.

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