Что означает код errno 29 (ESPIPE)?

 
Также может означать:
КонстантаТипОС
ERROR_WRITE_FAULTОшибка WindowsWindows
KERN_INVALID_OBJECTКод возврата ядра macOSmacOS
ippStsWrongIntersectROIСтатус Intel IPPЛюбая
NO_SPIN_LOCK_AVAILABLEКод BSODWindows
Предыдущий Следующий
ENOSPC EROFS

ESPIPE

Какой объект нельзя позиционировать

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

Чаще всего код возвращает lseek(), но высокоуровневая потоковая функция может показать то же состояние, когда в итоге попросит нижележащий дескриптор выполнить seek. Это не означает разрыв потока. Приложение просто выбрало файловую операцию для последовательного источника данных.

Как обработать

  • До использования seek-кода определите тип дескриптора: обычный файл, позиционируемое блочное устройство, канал, FIFO, сокет, терминал или потоковая обёртка.
  • Для каналов и сокетов сохраняйте нужные байты в прикладном буфере, если разбор протокола требует просмотра вперёд или повторного чтения.
  • Если API необходим произвольный доступ, сначала сохраните поток во временный обычный файл либо измените формат под последовательную обработку.
  • Не повторяйте lseek() на том же непозиционируемом дескрипторе: возможность не появится без замены объекта.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.