lockf(3)

NUME
lockf - aplică, testează sau elimină o blocare POSIX pe un fișier deschis

BIBLIOTECA
Biblioteca C standard (libc, -lc)

REZUMAT
#include <unistd.h>

int lockf(int fd, int cmd, off_t len);

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

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 cmd, 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

EACCES sau EAGAIN
    Fișierul este blocat și a fost specificat F_TLOCK sau F_TEST, sau operațiunea 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 cmd este F_LOCK sau F_TLOCK și fd nu este un descriptor de fișier inscriptibil.

EDEADLK
    Comanda 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 cmd.

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
fcntl(2), flock(2)

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 creată de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) 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.