table of contents
- bookworm-backports 4.26.3.1-3~bpo12+1
- testing 4.26.3.1-3
- unstable 4.27.0-1
lseek(2) | System Calls Manual | lseek(2) |
NUME¶
lseek - repoziționarea indicatorului de poziție pentru citirea/scrierea fișierului
BIBLIOTECA¶
Biblioteca C standard (libc, -lc)
SINOPSIS¶
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
DESCRIERE¶
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ă:
- SEEK_SET
- Indicatorul de poziție al fișierului este definit la offset octeți.
- SEEK_CUR
- Indicatorul de poziție al fișierului este definit la locația sa curentă plus offset octeți.
- SEEK_END
- Indicatorul de poziție al fișierului este definit la dimensiunea fișierului plus offset octeți.
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.
Căutarea datelor și a găurilor din fișiere¶
Începând cu Linux 3.1, Linux acceptă următoarele valori suplimentare pentru whence:
- SEEK_DATA
- Ajustează indicatorul de poziție al fișierului la următoarea locație din fișier mai mare sau egală cu offset care conține date. Dacă offset indică date, atunci indicatorul de poziție al fișierului este stabilit la offset.
- SEEK_HOLE
- Ajustează indicatorul de poziție al fișierului la următoarea gaură din fișier mai mare sau egală cu offset. Dacă offset indică mijlocul unei găuri, atunci indicatorul de poziție al fișierului este stabilit la offset. Dacă nu există nicio gaură după offset, atunci indicatorul de poziție al fișierului este ajustat la sfârșitul fișierului (de exemplu, există o gaură implicită la sfârșitul oricărui fișier).
Î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:
- •
- Btrfs (începând cu Linux 3.1)
- •
- OCFS (începând cu Linux 3.2)
- •
- XFS (începând cu Linux 3.5)
- •
- ext4 (începând cu Linux 3.8)
- •
- tmpfs(5) (începând cu Linux 3.8)
- •
- NFS (începând cu Linux 3.18)
- •
- FUSE (începând cu Linux 4.5)
- •
- GFS2 (începând cu Linux 4.15)
VALOAREA RETURNATö
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.
ERORI-IEȘIRE¶
- EBADF
- fd nu este un descriptor de fișier deschis.
- EINVAL
- whence nu este valid. Sau: poziția fișierului rezultat ar fi negativă sau dincolo de sfârșitul unui dispozitiv explorabil.
- ENXIO
- whence este SEEK_DATA sau SEEK_HOLE, iar offset se află dincolo de sfârșitul fișierului sau whence este SEEK_DATA și offset se află într-o gaură la sfârșitul fișierului.
- EOVERFLOW
- Poziția din fișier rezultată nu poate fi reprezentată într-un off_t.
- ESPIPE
- fd este asociat cu o conductă, un soclu sau o FIFO (conductă cu nume).
STANDARDE¶
POSIX.1-2001, POSIX.1-2008, 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).
NOTE¶
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().
Tipul de date off_t este un tip de date de număr întreg cu semn specificat de POSIX.1.
Unele dispozitive sunt incapabile de căutare și POSIX nu specifică care dispozitive trebuie să ofere suport pentru lseek().
În Linux, utilizarea lseek() pe un dispozitiv de terminal eșuează cu eroarea ESPIPE.
CONSULTAȚI ȘI¶
dup(2), fallocate(2), fork(2), open(2), fseek(3), lseek64(3), posix_fallocate(3)
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.
5 februarie 2023 | Pagini de manual de Linux 6.03 |