Является ли ноль действительной ручкой? - PullRequest
8 голосов
/ 10 октября 2011

В .NET Framework есть класс SafeHandleZeroOrMinusOneIsInvalid, а также класс SafeHandleMinusOneIsInvalid.

Почему это? В каких ситуациях ноль является действительным маркером?

Ответы [ 4 ]

6 голосов
/ 10 октября 2011

В качестве дополнительной лекции к другим ответам см. эту запись в блоге OldNewThing о несовместимых возвращаемых значениях дескриптора.

3 голосов
/ 10 октября 2011

Как указано Microsoft в их документации (и продемонстрировано в описании Джошуа ,), это зависит от реализации, так сказать:

Он описывает формат недопустимого дескриптора.

Например, некоторые дескрипторы используют -1 как недопустимое значение дескриптора, а другие используют 0 .Дальнейшие производные этого класса (например, дескрипторы файлов или реестра) могут специализировать это далее .См. Класс SafeFileHandle для примера класса, производного от SafeHandleZeroOrMinusOneIsInvalid.

3 голосов
/ 10 октября 2011

Да.Ноль - это дескриптор файла для стандартного ввода.Неядерные дескрипторы недействительны, если ноль.

1 голос
/ 13 октября 2011

Я думаю, вы слишком много читаете в названии: все это означает, что некоторые API по соглашению возвращают 0, чтобы указать на ошибку, другие возвращают -1.Для API, который возвращает -1, это не означает, что 0 когда-либо будет действительным дескриптором, просто API возвращает -1, чтобы указать сбой.

Так что это действительно о значении, которое обычно используетсяс помощью API для указания сбоя;в нем ничего не говорится о том, являются ли какие-либо другие значения дескриптора действительными или нет для какого-либо данного набора API.

...