ioctl_ficlonerange(2) | System Calls Manual | ioctl_ficlonerange(2) |
ioctl_ficlonerange, ioctl_ficlone - partajarea unor date dintr-un fișier cu un alt fișier
Biblioteca C standard (libc, -lc)
#include <linux/fs.h> /* Definirea constantelor FICLONE* */ #include <sys/ioctl.h>
int ioctl(int dest_fd, FICLONERANGE, struct file_clone_range *arg); int ioctl(int dest_fd, FICLONE, int src_fd);
În cazul în care un sistem de fișiere acceptă fișiere care partajează stocarea fizică între mai multe fișiere („reflink”), această operațiune ioctl(2) poate fi utilizată pentru a face ca o parte din datele din fișierul src_fd să apară în fișierul dest_fd prin partajarea stocării subiacente, ceea ce este mai rapid decât realizarea unei copii fizice separate a datelor. Ambele fișiere trebuie să se afle în același sistem de fișiere. În cazul în care ar trebui să aibă loc o scriere a unui fișier într-o regiune partajată, sistemul de fișiere trebuie să se asigure că modificările rămân private pentru fișierul care este scris. Acest comportament este denumit în mod obișnuit „copiere la scriere”.
Acest ioctl „reflink” clonează până la src_length octeți din descriptorul de fișier src_fd la poziția src_offset în fișierul dest_fdd la poziția dest_offset, cu condiția ca ambele să fie fișiere. În cazul în care src_length este zero, ioctl „reflink” clonează la sfârșitul fișierului sursă. Această informație este transmisă într-o structură de următoarea formă:
struct file_clone_range { __s64 src_fd; __u64 src_offset; __u64 src_length; __u64 dest_offset; };
Clonele sunt atomice în ceea ce privește scrierile simultane, astfel încât nu este necesar să se ia nicio blocare pentru a obține o copie clonată consistentă.
Ioctl-ul FICLONE clonează fișiere întregi.
În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.
Codurile de eroare pot fi unul dintre următoarele, dar nu se limitează la acestea:
Aceste operații ioctl au apărut pentru prima dată în Linux 4.5. Ele erau cunoscute anterior sub numele de BTRFS_IOC_CLONE și BTRFS_IOC_CLONE_RANGE și erau private pentru Btrfs.
Această API (interfață de programare a aplicațiilor) este specifică pentru Linux.
Deoarece o operație de copiere la scriere „copy-on-write” necesită alocarea de noi spații de stocare, operația fallocate(2) poate să nu partajeze blocurile partajate pentru a garanta că scrierile ulterioare nu vor eșua din cauza lipsei de spațiu pe disc.
ioctl(2)
Traducerea în limba română a acestui manual a fost creată de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă Nicio RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.
30 octombrie 2022 | Pagini de manual de Linux 6.03 |