| Предыдущий | Следующий |
| ENOTBLK | ENOTBLK |
ENOTBLK
На этой странице рассматривается состояние Интерфейсу, специфичному для Darwin, требуется блочное устройство. Операции требуется специальное блочное устройство, но переданный путь или vnode имеет другой тип файла.
Имеет значение интерфейс, вернувший код
Обработка системных вызовов Darwin BSD: требование блочного устройства интерфейсом, специфичным для Darwin, относится к Darwin errno и должно декодироваться по точному заголовку SDK или XNU, использованному целевой системой. Расширения Darwin и устаревшие имена STREAMS, связанные с этим состоянием, могут отличаться наличием или нумерацией в других UNIX-подобных системах при диагностике операции, требующей блочного устройства. В рамках Обработки системных вызовов Darwin BSD формулировка, связанная с ENOTBLK, указывает на исходный интерфейс, но не доказывает, что код вернула современная подсистема с похожим названием.
Darwin назначает нескольким символам errno вне POSIX собственные значения и номера при диагностике операции, требующей блочного устройства. При исследовании требования блочного устройства не декодируйте число по таблице Linux и не считайте, что тот же символ возвращается тем же API в другой ОС.
Запись об инциденте
| Сведения | На какой вопрос отвечают |
|---|---|
| Путь, режим stat, старший и младший номера устройства, точка монтирования, операция и идентификатор песочницы. | Связывают требование блочного устройства с конкретным действующим объектом API, а не только с переведённым сообщением. |
| Значение Darwin errno и версия заголовка SDK/XNU, по которому оно декодировано при диагностике операции, требующей блочного устройства. | Показывают, возникла ли ошибка в ABI вызывающей стороны, оболочке или поставщике при диагностике операции, требующей блочного устройства. |
| Результат первого системного вызова или ioctl, а также процесс, поток и поколение объекта при диагностике операции, требующей блочного устройства. | Сохраняют первую границу до того, как errno может быть перезаписан при диагностике операции, требующей блочного устройства. |
| Заведомо исправный объект того же класса в той же сборке macOS при диагностике операции, требующей блочного устройства. | Даёт контрольное сравнение на той же платформе. |
Сохраните errno сразу после отказавшего вызова, вернувшего состояние Интерфейсу, специфичному для Darwin, требуется блочное устройство, до выполнения форматирования, трассировки, выделения памяти или очистки. Для Интерфейсу, специфичному для Darwin, требуется блочное устройство также сохраните возвращаемое значение функции, поскольку многие интерфейсы C сообщают об ошибке через него, а errno используют лишь как дополнительную информацию.
Контролируемые сравнения
- Сравните с настоящим блочным устройством, открытым с документированными привилегиями. Изменившийся errno после теста означает новую границу, а не другую формулировку исходной ошибки.
- Немедленно сохраните errno и сравните связанное возвращаемое значение при диагностике операции, требующей блочного устройства. После контроля повторите исходную операцию, чтобы результат оставался относящимся к требованию блочного устройства.
- Повторите тест с одним контролируемым объектом, сохранив идентификатор и песочницу без изменений при диагностике операции, требующей блочного устройства. Во время проверки не меняйте двоичный файл, ABI заголовков и поставщика.
Особенно показательны путь, режим stat, старший и младший номера устройства, точка монтирования, операция и идентификатор песочницы. В качестве контроля сравните с настоящим блочным устройством, открытым с документированными привилегиями. Для состояния Интерфейсу, специфичному для Darwin, требуется блочное устройство эти данные позволяют отличить устаревший идентификатор или неподдерживаемый запрос от общего отказа поставщика без масштабных изменений узла.
Близкие интерпретации
| Соблазнительное предположение | Более безопасная интерпретация |
|---|---|
| Английская фраза считается переносимой между платформами | Ошибка относится к обработке системных вызовов Darwin BSD; до применения таблицы errno другой платформы проверьте заголовки целевой системы и API, вернувший код |
| Повтор завершился успешно и стёр исходные данные | Повтор может заменить ошибку другим состоянием; заранее сохраните первый вызов, числовое значение и поколение объекта |
Если оболочка преобразует состояние Интерфейсу, специфичному для Darwin, требуется блочное устройство в исключение или логическое значение, добавьте инструментирование ниже этой оболочки. Для Интерфейсу, специфичному для Darwin, требуется блочное устройство решающее значение имеет системный вызов, ioctl, функция CRT или точка входа совместимости, впервые предоставившая код.
Критерии устранения
Целевое исправление. Проверяйте тип файла до операции и используйте интерфейс устройства, предназначенный для современной macOS.
Доказательство отсутствия регрессии. Правильный тип устройства принимается, а обычные файлы отклоняются до привилегированного ввода-вывода. Проверьте один поддерживаемый граничный случай и один намеренно отрицательный случай, чтобы обработка состояния Интерфейсу, специфичному для Darwin, требуется блочное устройство оставалась явной.
Технические ссылки
Эти источники владельцев и стандартов определяют пространство имён и контракт подсистемы, необходимые для проверки Обработки системных вызовов Darwin BSD ENOTBLK в установленной версии платформы.
- Apple XNU: errno.h — определяет используемое пространство статусов при диагностике операции, требующей блочного устройства.
- Apple: ошибки системных вызовов intro(2) — описывает границу API или жизненного цикла при диагностике операции, требующей блочного устройства.
- Apple OSS: исходный код XNU — предоставляет контекст ABI, реализации или протокола при диагностике операции, требующей блочного устройства.
- The Open Group: errno.h — определяет ограничения переносимости и проверки при диагностике операции, требующей блочного устройства.
Нужно найти другой код? Найти другой код состояния или ошибки.