lseek(2) System Calls Manual lseek(2) NUME lseek - repoziionarea indicatorului de poziie pentru citirea/scrierea fiierului BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include off_t lseek(int fd, off_t offset, int whence); DESCRIERE lseek() repoziioneaza indicatorul poziiei de fiier al descrierii fiierului deschis asociat cu descriptorul de fiier fd la argumentul offset in conformitate cu directiva whence dupa cum urmeaza: SEEK_SET Indicatorul de poziie al fiierului este definit la offset octei. SEEK_CUR Indicatorul de poziie al fiierului este definit la locaia sa curenta plus offset octei. SEEK_END Indicatorul de poziie al fiierului este definit la dimensiunea fiierului plus offset octei. lseek() permite ca indicatorul de poziie al fiierului sa fie stabilit dincolo de sfaritul fiierului (dar acest lucru nu modifica dimensiunea fiierului). Daca ulterior se scriu date in acest punct, citirile ulterioare ale datelor din spaiu (o ,,gaura") returneaza octei nuli (,,\0") pana cand datele sunt scrise efectiv in spaiu. Cautarea datelor i a gaurilor din fiiere Incepand cu Linux 3.1, Linux accepta urmatoarele valori suplimentare pentru whence: SEEK_DATA Ajusteaza indicatorul de poziie al fiierului la urmatoarea locaie din fiier mai mare sau egala cu offset care conine date. Daca offset indica date, atunci indicatorul de poziie al fiierului este stabilit la offset. SEEK_HOLE Ajusteaza indicatorul de poziie al fiierului la urmatoarea gaura din fiier mai mare sau egala cu offset. Daca offset indica mijlocul unei gauri, atunci indicatorul de poziie al fiierului este stabilit la offset. Daca nu exista nicio gaura dupa offset, atunci indicatorul de poziie al fiierului este ajustat la sfaritul fiierului (de exemplu, exista o gaura implicita la sfaritul oricarui fiier). In ambele cazuri de mai sus, lseek() eueaza daca offset indica dupa sfaritul fiierului. Aceste operaii permit aplicaiilor sa cartografieze gaurile dintr-un fiier dispers alocat. Acest lucru poate fi util pentru aplicaii precum instrumentele de copie de rezerva a fiierelor, care pot economisi spaiu la crearea copiilor de rezerva i pot pastra gaurile, daca dispun de un mecanism de descoperire a gaurilor. In sensul acestor operaii, o gaura este o secvena de zerouri care (in mod normal) nu a fost alocata in spaiul de stocare subiacent al fiierului. Cu toate acestea, un sistem de fiiere nu este obligat sa raporteze gaurile, astfel incat aceste operaii nu sunt un mecanism garantat pentru cartografierea spaiului de stocare alocat efectiv unui fiier; (in plus, o secvena de zerouri care a fost scrisa efectiv in spaiul de stocare subiacent poate sa nu fie raportata ca o gaura). In cea mai simpla punere in aplicare, un sistem de fiiere poate susine aceste operaii facand ca SEEK_HOLE sa returneze intotdeauna poziia de la sfaritul fiierului i facand ca SEEK_DATA sa returneze intotdeauna offset (adica, chiar daca locaia la care se refera offset este o gaura, se poate considera ca aceasta consta din date care sunt o secvena de zerouri). Macrocomanda de testare a caracteristicilor _GNU_SOURCE trebuie definita pentru a obine definiiile SEEK_DATA i SEEK_HOLE din . Operaiile SEEK_HOLE i SEEK_DATA sunt acceptate pentru urmatoarele sisteme de fiiere: o Btrfs (incepand cu Linux 3.1) o OCFS (incepand cu Linux 3.2) o XFS (incepand cu Linux 3.5) o ext4 (incepand cu Linux 3.8) o tmpfs(5) (incepand cu Linux 3.8) o NFS (incepand cu Linux 3.18) o FUSE (incepand cu Linux 4.5) o GFS2 (incepand cu Linux 4.15) VALOAREA RETURNATA La finalizarea cu succes, lseek() returneaza locaia indicatorului de poziie rezultata, masurata in octei de la inceputul fiierului. In caz de eroare, este returnata valoarea (off_t) -1, iar errno este configurata pentru a indica eroarea. ERORI-IEIRE EBADF fd nu este un descriptor de fiier deschis. EINVAL whence nu este valid. Sau: poziia fiierului rezultat ar fi negativa sau dincolo de sfaritul unui dispozitiv explorabil. ENXIO whence este SEEK_DATA sau SEEK_HOLE, iar offset se afla dincolo de sfaritul fiierului sau whence este SEEK_DATA i offset se afla intr-o gaura la sfaritul fiierului. EOVERFLOW Poziia din fiier rezultata nu poate fi reprezentata intr-un off_t. ESPIPE fd este asociat cu o conducta, un soclu sau o FIFO (conducta cu nume). VERSIUNI In Linux, utilizarea lseek() pe un dispozitiv de terminal eueaza cu eroarea ESPIPE. STANDARDE POSIX.1-2008. ISTORIC POSIX.1-2001, SVr4, 4.3BSD. SEEK_DATA i SEEK_HOLE sunt extensii non-standard prezente i in Solaris, FreeBSD i DragonFly BSD; se propune includerea lor in urmatoarea revizuire POSIX (ediia 8). NOTE Consultai open(2) pentru o discuie a relaiei dintre descriptorii de fiiere, descrierile de fiiere deschise i fiiere. Daca fanionul de stare a fiierului O_APPEND este activat la descrierea fiierului deschis, atunci un write(2) intotdeauna muta indicatorul de poziie al fiierului la sfaritul fiierului, indiferent de utilizarea lseek(). Unele dispozitive sunt incapabile de cautare i POSIX nu specifica care dispozitive trebuie sa ofere suport pentru lseek(). CONSULTAI I dup(2), fallocate(2), fork(2), open(2), fseek(3), lseek64(3), posix_fallocate(3) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.15 17 mai 2025 lseek(2)