Главная » 2017 » Ноябрь » 19 » man 2 ioctl_ficlonerange
22:40
man 2 ioctl_ficlonerange

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


ioctl_ficlonerange, ioctl_ficlone - сделать некоторые данные одного файла общими с
другим файлом



ОБЗОР


#include <sys/ioctl.h>
#include <linux/fs.h>

int ioctl(int dest_fd, FICLONERANGE, struct file_clone_range *arg);
int ioctl(int dest_fd, FICLONE, int src_fd);



ОПИСАНИЕ


Если файловая система поддерживает общее файловое физическое хранилище для файлов
(«reflink»), то эту операцию ioctl(2) можно использовать для того, чтобы часть
данных файла src_fd появилась в файле dest_fd в виде общего пространства на
носителе, что быстрее по сравнению с созданием отдельной физической копии данных.
Оба файла должны располагаться в одной файловой системе. Если выполняется запись в
эту общую область, то файловая система должна гарантировать, что изменения будут
видны только в файле, в который производится запись. Такое поведение часто
называют как «копирование при записи» (copy on write).

Данный ioctl создаёт ссылку (reflink) на не более src_length байт из файлового
дескриптора src_fd по смещению src_offset в файл dest_fd по смещению dest_offset,
предоставляя её обоим файлам. Если src_length равно нулю, то ioctl делает ссылку
на конец файла-источника. Данная информация передаётся в структуре следующего
вида:

struct file_clone_range {
__s64 src_fd;
__u64 src_offset;
__u64 src_length;
__u64 dest_offset;
};

Клоны атомарны для одновременной записи, поэтому для получения корректной копии не
нужно получать блокировки.

Операция FICLONE ioctl клонирует файлы полностью.



ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ


В случае ошибки возвращается -1, а errno устанавливается в значение ошибки.



ОШИБКИ


Возможные коды ошибок (помимо прочих):

EBADF Дескриптор src_fd не открыт на чтение; dest_fd не открыт на запись или
открыт только для добавления; файловая система, в которой находится src_fd,
не поддерживает reflink.

EINVAL Файловая система не поддерживает создание ссылок диапазонов в заданных
файлах. Эта ошибка также может возникнуть, если файловый дескриптор
представляет устройство, FIFO или сокет. Обычно, для дисковых файловых
систем требуются, чтобы аргументы смещения и длины были выровнены по
основному размеру блока. В XFS и Btrfs нет поддержки ссылок перекрывающихся
диапазонов в одном и том же файле.

EISDIR Один из файлов является каталогом и файловая система не поддерживает
Один из файлов является файлом подкачки. Файлы подкачки не могут
содержаться в совместных хранилищах.

EXDEV Дескрипторы dest_fd и src_fd находятся на разных смонтированных файловых
системах.



ВЕРСИИ


Данные операции ioctl появились в Linux 4.5. Раньше они назывались BTRFS_IOC_CLONE
и BTRFS_IOC_CLONE_RANGE и работали только в Btrfs.



СООТВЕТСТВИЕ СТАНДАРТАМ


Данный программный интерфейс существует только в Linux.



ЗАМЕЧАНИЯ


Так как для операции копирования-при-записи требуется выделение нового
пространства в хранилище, операция fallocate(2) может отменить совместное
использование общих блоков для гарантии того, что последующие операции записи не
завершатся ошибкой из-за нехватки места на диске.



СМОТРИТЕ ТАКЖЕ


ioctl(2)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 363 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar