| lseek(2) | System Calls Manual | lseek(2) |
lseek - repoziționarea indicatorului de poziție pentru citirea/scrierea fișierului
Biblioteca C standard (libc, -lc)
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
lseek() repoziționează indicatorul poziției de fișier al descrierii fișierului deschis asociat cu descriptorul de fișier fd la argumentul offset în conformitate cu directiva whence după cum urmează:
lseek() permite ca indicatorul de poziție al fișierului să fie stabilit dincolo de sfârșitul fișierului (dar acest lucru nu modifică dimensiunea fișierului). Dacă ulterior se scriu date în acest punct, citirile ulterioare ale datelor din spațiu (o „gaură”) returnează octeți nuli („\0”) până când datele sunt scrise efectiv în spațiu.
Începând cu Linux 3.1, Linux acceptă următoarele valori suplimentare pentru whence:
În ambele cazuri de mai sus, lseek() eșuează dacă offset indică după sfârșitul fișierului.
Aceste operații permit aplicațiilor să cartografieze găurile dintr-un fișier dispers alocat. Acest lucru poate fi util pentru aplicații precum instrumentele de copie de rezervă a fișierelor, care pot economisi spațiu la crearea copiilor de rezervă și pot păstra găurile, dacă dispun de un mecanism de descoperire a găurilor.
În sensul acestor operații, o gaură este o secvență de zerouri care (în mod normal) nu a fost alocată în spațiul de stocare subiacent al fișierului. Cu toate acestea, un sistem de fișiere nu este obligat să raporteze găurile, astfel încât aceste operații nu sunt un mecanism garantat pentru cartografierea spațiului de stocare alocat efectiv unui fișier; (în plus, o secvență de zerouri care a fost scrisă efectiv în spațiul de stocare subiacent poate să nu fie raportată ca o gaură). În cea mai simplă punere în aplicare, un sistem de fișiere poate susține aceste operații făcând ca SEEK_HOLE să returneze întotdeauna poziția de la sfârșitul fișierului și făcând ca SEEK_DATA să returneze întotdeauna offset (adică, chiar dacă locația la care se referă offset este o gaură, se poate considera că aceasta constă din date care sunt o secvență de zerouri).
Macrocomanda de testare a caracteristicilor _GNU_SOURCE trebuie definită pentru a obține definițiile SEEK_DATA și SEEK_HOLE din <unistd.h>.
Operațiile SEEK_HOLE și SEEK_DATA sunt acceptate pentru următoarele sisteme de fișiere:
La finalizarea cu succes, lseek() returnează locația indicatorului de poziție rezultată, măsurată în octeți de la începutul fișierului. În caz de eroare, este returnată valoarea (off_t) -1, iar errno este configurată pentru a indica eroarea.
În Linux, utilizarea lseek() pe un dispozitiv de terminal eșuează cu eroarea ESPIPE.
POSIX.1-2008.
POSIX.1-2001, SVr4, 4.3BSD.
SEEK_DATA și SEEK_HOLE sunt extensii non-standard prezente și în Solaris, FreeBSD și DragonFly BSD; se propune includerea lor în următoarea revizuire POSIX (ediția 8).
Consultați open(2) pentru o discuție a relației dintre descriptorii de fișiere, descrierile de fișiere deschise și fișiere.
Dacă fanionul de stare a fișierului O_APPEND este activat la descrierea fișierului deschis, atunci un write(2) întotdeauna mută indicatorul de poziție al fișierului la sfârșitul fișierului, indiferent de utilizarea lseek().
Unele dispozitive sunt incapabile de căutare și POSIX nu specifică care dispozitive trebuie să ofere suport pentru lseek().
dup(2), fallocate(2), fork(2), open(2), fseek(3), lseek64(3), posix_fallocate(3)
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.
| 15 iunie 2024 | Pagini de manual de Linux 6.9.1 |