lockf(3) | Library Functions Manual | lockf(3) |
NUME
lockf - aplică, testează sau elimină o blocare POSIX pe un fișier deschis
BIBLIOTECA
Biblioteca C standard (libc, -lc)
SINOPSIS
#include <unistd.h>
int lockf(int fd, int op, off_t len);
lockf():
_XOPEN_SOURCE >= 500 || /* glibc >= 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
DESCRIERE
Aplică, testează sau elimină un blocaj POSIX pe o secțiune a unui fișier deschis. Fișierul este specificat prin fd, un descriptor de fișier deschis pentru scriere, acțiunea prin op, iar secțiunea este formată din pozițiile de octeți pos..pos+len-1 dacă len este pozitiv și pos-len. pos-1 dacă len este negativ, unde pos este poziția curentă a fișierului, iar dacă len este zero, secțiunea se extinde de la poziția curentă a fișierului până la infinit, cuprinzând pozițiile prezente și viitoare de sfârșit de fișier. În toate cazurile, secțiunea se poate extinde dincolo de sfârșitul curent al fișierului.
În Linux, lockf() este doar o interfață peste blocarea fcntl(2). Multe alte sisteme implementează lockf() în acest mod, dar rețineți că POSIX.1 lasă nespecificată relația dintre blocările lockf() și fcntl(2). O aplicație portabilă ar trebui probabil să evite amestecarea apelurilor la aceste interfețe.
Operațiile valide sunt prezentate mai jos:
- F_LOCK
- Stabilește o blocare exclusivă pe secțiunea specificată a fișierului. Dacă această secțiune (sau o parte a acesteia) este deja blocată, apelul se blochează până la eliberarea blocării anterioare. În cazul în care această secțiune se suprapune peste o secțiune blocată anterior, ambele sunt fuzionate. Blocajele de fișier sunt eliberate imediat ce procesul care deține blocajele închide un descriptor de fișier pentru acest fișier. Un proces copil nu moștenește aceste blocaje.
- F_TLOCK
- Același lucru ca F_LOCK, dar apelul nu se blochează niciodată și returnează o eroare dacă fișierul este deja blocat.
- F_ULOCK
- Deblochează secțiunea indicată din fișier. Acest lucru poate face ca o secțiune blocată să fie împărțită în două secțiuni blocate.
- F_TEST
- Testează blocarea: returnează 0 dacă secțiunea specificată este deblocată sau blocată de acest proces; returnează -1, stabilește errno la EAGAIN (EACCES pe alte sisteme), dacă un alt proces deține o blocare.
VALOAREA RETURNATĂ
În caz de succes, se returnează zero. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.
ERORI-IEȘIRE
- EACCES sau EAGAIN
- Fișierul este blocat și a fost specificat F_TLOCK sau F_TEST, sau operația este interzisă deoarece fișierul a fost plasat în memorie de un alt proces.
- EBADF
- fd nu este un descriptor de fișier deschis; sau op este F_LOCK sau F_TLOCK și fd nu este un descriptor de fișier inscriptibil.
- EDEADLK
- op (operația) a fost F_LOCK și această operație de blocare ar fi provocat un blocaj.
- EINTR
- În timp ce aștepta să obțină un blocaj, apelul a fost întrerupt de livrarea unui semnal capturat de un gestionar; a se vedea signal(7).
- EINVAL
- A fost specificată o operație nevalidă în op.
- ENOLCK
- Prea multe blocări de segment deschise, tabelul de blocare este plin.
ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare |
lockf() | Siguranța firelor | MT-Safe |
STANDARDE
POSIX.1-2008.
ISTORIC
POSIX.1-2001, SVr4.
CONSULTAȚI ȘI
locks.txt și mandatory-locking.txt în directorul sursă al nucleului Linux Documentation/filesystems (pe nucleele mai vechi, aceste fișiere se află direct sub directorul Documentation, iar mandatory-locking.txt se numește mandatory.txt).
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.8 |