char path[1];
};
struct _io_connect_link_reply {
uint32_t reserved1[2];
uint8_t eflag;
uint8_t reserved2[3];
uint32_t umask;
uint16_t nentries;
uint16_t path_len;
};
typedef union _io_rename_extra {
char path[1];
} io_rename_extra_t;
typedef union {
struct _io_connect connect;
struct _io_connect_link_reply link_reply;
} io_rename_t;
Описание: Выполняет операцию переименования, получив на вход первоначальное имя в элементе path и новое имя в поле path переданного параметра extra. Замечание по реализации: для первоначального имени задается имя пути (а не OCB) — это делается специально для случая переименования файла, который является жесткой связью к другому файлу. Если бы был задан OCB, две (или более) жестких связей к одному и тому же файлу различить было бы нельзя.
Данная функция будет вызываться только для тех двух имен файлов, которые принадлежат одной и той же файловой системе (то есть одному и тому же устройству). Поэтому в проверке случаев, в которых надо было бы возвращать EXDEV, нет никакой необходимости. Это ничуть не мешает вам возвращать EXDEV — например, если вы не хотите выполнять rename() самостоятельно (например, операция переименования из одного каталога в другой может оказаться очень сложной). В случае возврата EXDEV командно-строковая утилита mv
выполнит сначала cp
, а потом rm
(библиотечная функция rename() этого не сделает — она просто установит errno в EXDEV).
Также перед вызовом этой функции должны быть разрешены все символьные связи (где это применимо), а переданные имена путей должны быть абсолютны и относиться к файловой системе, за которую отвечает данный администратор ресурсов.
Возвращает: Код завершения, при помощи вспомогательного макроса _RESMGR_STATUS.
int io_shutdown(resmgr_context_t *ctp, io_shutdown_t *msg,
RESMGR_OCB_T *ocb)
Данная функция зарезервирована QSSL для будущего использования. Вам следует инициализировать таблицу функций ввода/вывода, используя iofunc_func_init(), и не изменять данную точку входа.
int io_space(resmgr_context_t *ctp, io_space_t *msg,
RESMGR_OCB_T *ocb)
Классификация: Функция ввода/вывода
Обработчик по умолчанию: Нет
Вспомогательные функции: iofunc_space_verify()
Клиентская функция: chsize(), fcntl(), ftruncate(), ltrunc()
Сообщение _IO_SPACE
Структура данных:
struct _io_space {
uint16_t type;
uint16_t combine_len;
uint16_t subtype;
short whence;
uint64_t start;
uint64_t len;
};
typedef union {
struct _io_space i;
uint64_t o;
} io_space_t;
Описание: Эта функция применяется для выделения или освобождения занимаемого ресурсом пространства. Параметр subtype («подтип») указывает на то, следует ли это пространство выделить (если равен F_ALLOCSP) или освободить (если равен F_FREESP). Комбинация параметров whence («откуда») и start («начало») указывает, где следует начать выделение/ освобождение; элемент len указывает размер операции.
Возвращает: Число байтов (размер ресурса), посредством вспомогательного макроса _RESMGR_STATUS.
int io_stat(resmgr_context_t *ctp, io_stat_t *msg,
RESMGR_OCB_T *ocb)
Классификация: Функция ввода/вывода
Обработчик по умолчанию: iofunc_stat_default()
Вспомогательные функции: iofunc_stat()
Клиентская функция: stat(), lstat(), fstat()
Сообщения: _IO_STAT
Структура данных:
struct _io_stat {
uint16_t type;
uint16_t combine_len;
uint32_t zero;
};
typedef union (
struct _io_stat i;
struct stat o;
} io_stat_t;
Описание: Обрабатывает сообщение, запрашивающее информацию о ресурсе, связанном с переданным OCB. Заметьте, что атрибутная запись содержит всю информацию, необходимую для выполнения запроса stat(). Вспомогательная функция iofunc_stat() заполняет структуру struct stat
, базированную на атрибутной записи. Эта вспомогательная функция также изменяет сохраненные элементы dev/rdev так, чтобы они были уникальны с точки зрения единичного узла (это используется для выполнения вызовов stat() в отношении файлов по сети). Писать этот обработчик самостоятельно особого смысла нет.
Возвращает: Код завершения, при помощи вспомогательного макроса _RESMGR_STATUS, и структуру struct stat
— в ответном сообщении.
int io_sync(resmgr_context_t *ctp, io_sync_t *msg,
RESMGR_OCB_T *ocb)
Классификация: Функция ввода/вывода
Обработчик по умолчанию: iofunc_sync_default()
Вспомогательные функции: iofunc_sync_verify(), iofunc_sync()
Клиентская функция: fsync(), fdatasync()
Сообщения: _IO_SYNC