| Предыдущий | Следующий |
| ENOSPC | EROFS |
ESPIPE
Какой объект нельзя позиционировать
ESPIPE означает, что операция попыталась использовать файловую позицию у объекта, не имеющего перемещаемого байтового смещения. Каналы, FIFO и сокеты передают поток данных, а не предоставляют устойчивую позицию, которую можно переместить назад, вперёд или запросить как у обычного файла. То же ограничение обычно относится к терминалам и некоторым устройствам.
Чаще всего код возвращает lseek(), но высокоуровневая потоковая функция может показать то же состояние, когда в итоге попросит нижележащий дескриптор выполнить seek. Это не означает разрыв потока. Приложение просто выбрало файловую операцию для последовательного источника данных.
Как обработать
- До использования seek-кода определите тип дескриптора: обычный файл, позиционируемое блочное устройство, канал, FIFO, сокет, терминал или потоковая обёртка.
- Для каналов и сокетов сохраняйте нужные байты в прикладном буфере, если разбор протокола требует просмотра вперёд или повторного чтения.
- Если API необходим произвольный доступ, сначала сохраните поток во временный обычный файл либо измените формат под последовательную обработку.
- Не повторяйте
lseek()на том же непозиционируемом дескрипторе: возможность не появится без замены объекта.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.
