Scroll to navigation

sync_file_range(2) System Calls Manual sync_file_range(2)

NUME

sync_file_range - sincronizează un segment de fișier cu discul

BIBLIOTECA

Biblioteca C standard (libc, -lc)

SINOPSIS

#define _GNU_SOURCE         /* Consultați feature_test_macros(7) */
#define _FILE_OFFSET_BITS 64
#include <fcntl.h>
int sync_file_range(int fd, off_t offset, off_t nbytes,
                    unsigned int flags);

DESCRIERE

sync_file_range() permite un control precis la sincronizarea fișierului deschis la care se referă descriptorul de fișier fd cu discul.

offset este octetul de început al intervalului de fișiere care urmează să fie sincronizat. nbytes specifică lungimea intervalului care urmează să fie sincronizat, în octeți; dacă nbytes este zero, atunci toți octeții de la offset până la sfârșitul fișierului sunt sincronizați. Sincronizarea se face în unități de dimensiune a paginii de sistem: offset este rotunjit în jos la limita paginii; (offset+nbytes-1) este rotunjit în sus la limita paginii.

Argumentul mască de biți flags poate include oricare dintre următoarele valori:

Așteaptă scrierea tuturor paginilor din intervalul specificat care au fost deja trimise controlorului dispozitivului pentru scriere înainte de a efectua orice operație de scriere.
Inițiază scrierea tuturor paginilor murdare din intervalul specificat care nu sunt în prezent trimise pentru scriere. Rețineți că chiar și acest lucru poate bloca dacă încercați să scrieți mai mult decât dimensiunea cozii de solicitări.
Așteaptă scrierea tuturor paginilor din interval după efectuarea oricărei operații de scriere.

Specificarea flags ca 0 este permisă, ca o operație fără efect.

Atenție

Acest apel de sistem este extrem de periculos și nu trebuie utilizat în programe portabile. Niciuna dintre aceste operații nu scrie metadatele fișierului. Prin urmare, cu excepția cazului în care aplicația efectuează strict suprascrieri ale blocurilor de disc deja instanțiate, nu există garanții că datele vor fi disponibile după o blocare. Nu există o interfață de utilizator care să indice dacă o scriere este pur și simplu o suprascriere. Pe sistemele de fișiere care utilizează semantica copiere la scriere (de exemplu, btrfs), suprascrierea blocurilor alocate existente este imposibilă. Atunci când se scrie în spațiul prealocat, multe sisteme de fișiere necesită, de asemenea, apeluri către alocatorul de blocuri, pe care acest apel de sistem nu le sincronizează pe disc. Acest apel de sistem nu golește cache-urile de scriere pe disc și, prin urmare, nu oferă nicio integritate a datelor pe sistemele cu cache-uri de scriere pe disc volatile.

Câteva detalii

SYNC_FILE_RANGE_WAIT_BEFORE și SYNC_FILE_RANGE_WAIT_AFTER vor detecta orice erori de In/Ieș sau condiții ENOSPC și le vor returna apelantului.

Combinații utile ale biților flags sunt:

Se asigură că toate paginile din intervalul specificat care erau murdare când a fost apelată funcția sync_file_range() sunt plasate sub scriere. Aceasta este o operație de scriere inițială pentru integritatea datelor.
Începe scrierea tuturor paginilor murdare din intervalul specificat care nu sunt în prezent în curs de scriere. Aceasta este o operatie asincronă de golire pe disc. Aceasta nu este potrivită pentru operații de integritate a datelor.
Așteaptă finalizarea scrierii tuturor paginilor din intervalul specificat. Această opțiune poate fi utilizată după o operație anterioară SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE pentru a aștepta finalizarea acelei operații și a obține rezultatul acesteia.
Aceasta este o operație de scriere pentru integritatea datelor care va asigura că toate paginile din intervalul specificat care erau murdare când a fost apelată sync_file_range() sunt salvate pe disc.

VALOAREA RETURNATĂ

În caz de succes, sync_file_range() returnează 0; în caz de eșec, returnează -1 și errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

descriptor-fișier nu este un descriptor de fișier valid.
flags specifică un bit nevalid; sau offset sau nbytes nu este valid.
Eroare de In/Ieș.
Memorie insuficientă.
Spațiu pe disc insuficient.
fd se referă la altceva decât un fișier obișnuit, un dispozitiv bloc sau un director.

VERSIUNI

sync_file_range2()

Unele arhitecturi (de exemplu, PowerPC, ARM) necesită ca argumentele pe 64 de biți să fie aliniate într-o pereche adecvată de registre. Pe astfel de arhitecturi, semnătura apelului sync_file_range() prezentată în SINOPSIS ar forța irosirea unui registru ca umplutură între argumentele fd și offset. (A se vedea syscall(2) pentru detalii.) Prin urmare, aceste arhitecturi definesc o apelare de sistem diferită care ordonează argumentele în mod adecvat:


int sync_file_range2(int fd, unsigned int flags,
                     off_t offset, off_t nbytes);

Comportamentul acestui apel de sistem este în rest identic cu cel al sync_file_range().

STANDARDE

Linux.

ISTORIC

Linux 2.6.17.

sync_file_range2()

Un apel de sistem cu această semnătură a apărut pentru prima dată pe arhitectura ARM în Linux 2.6.20, cu numele arm_sync_file_range(). A fost redenumit în Linux 2.6.22, când a fost adăugat apelul de sistem analog pentru PowerPC. Pe arhitecturile care oferă suport glibc, glibc încorporează în mod transparent sync_file_range2() sub numele sync_file_range().

NOTE

_FILE_OFFSET_BITS trebuie definit ca fiind 64 în codul care preia adresa sync_file_range, dacă codul este destinat să fie portabil pe platformele tradiționale x86 și ARM pe 32 de biți, unde lățimea off_t este implicit de 32 de biți.

CONSULTAȚI ȘI

fdatasync(2), fsync(2), msync(2), sync(2)

TRADUCERE

Traducerea în limba română a acestui manual a fost făcută 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.

2 mai 2024 Pagini de manual de Linux 6.9.1