iofunc_lseek()

Обработать сообщение _IO_LSEEK

Прототип:

#include <sys/iofunc.h>
int iofunc_lseek( resmgr_context_t *ctp,
io_lseek_t *msg,
iofunc_ocb_t *ocb,
iofunc_attr_t *attr );

Аргументы:

ctp
Указатель на структуру resmgr_context_t, которую библиотека менеджера ресурсов использует для передачи контекстной информации между функциями.
msg
Указатель на структуру io_lseek_t, содержащую сообщение, полученное менеджером ресурсов.
ocb
Указатель на структуру блока управления открытым контекстом (OCB, Open Control Block) iofunc_ocb_t, созданную при открытии ресурса клиентом.
attr
Указатель на атрибутную запись iofunc_attr_t, описывающую характеристики устройства, связанного с менеджером ресурсов.

Библиотека:

libc

Описание:

Вспомогательная функция iofunc_lseek() реализует POSIX семантику для клиентского вызова lseek(), принимаемого как _IO_LSEEK сообщение менеджером ресурсов.

Функция iofunc_lseek() обрабатывает три разных случая: SEEK_SET, SEEK_CUR и SEEK_END, обновляя поле ocb->offset новой позицией в файле.

Обратите внимание, что если в структуре монтирования не установлен флаг IOFUNC_MOUNT_32BIT, iofunc_lseek() обрабатывает 64-разрядные смещения. Если флаг установлен (это означает, что устройство поддерживает только 32-разрядные смещения), то полученное смещение обрабатывается как 32-разрядное и если оно превышает 32 бита, то обрезается до LONG_MAX. Кроме того, эта функция правильно обрабатывает комбинированные сообщения, упрощая работу, необходимую для поддержки lseek.

Возвращаемое значение:

-1
Успешное завершение; библиотека менеджера ресурсов должна вернуть клиенту IOV, состоящий из одной части.
EOK
Сообщение является комбинированным, нет ошибки.
EINVAL
Элемент whence в сообщении _IO_LSEEK не был одним из SEEK_SET, SEEK_CUR или SEEK_END, или полученная после смещения позиция была отрицательной (переполнение).
EOVERFLOW
Полученное смещение не может быть правильно представлено в объекте типа off_t.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

iofunc_attr_t, io_lseek_t, iofunc_lseek_default(), iofunc_ocb_t, lseek(), resmgr_context_t




Предыдущий раздел: Описание API системной библиотеки