Обработать сообщение _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 );
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.
_IO_LSEEK
не был одним из SEEK_SET
, SEEK_CUR
или SEEK_END
, или полученная после смещения позиция была отрицательной (переполнение).off_t
.ЗОСРВ «Нейтрино»
iofunc_attr_t, io_lseek_t, iofunc_lseek_default(), iofunc_ocb_t, lseek(), resmgr_context_t
Предыдущий раздел: Описание API системной библиотеки