'\" t .\" Title: flock .\" Author: [see the "AUTHOR(S)" section] .\" Generator: Asciidoctor 2.0.23 .\" Date: 2025-03-29 .\" Manual: Comenzi utilizator .\" Source: util-linux 2.41 .\" Language: English .\" .TH "FLOCK" "1" "2025-03-29" "util\-linux 2.41" "Comenzi utilizator" .ie \n(.g .ds Aq \(aq .el .ds Aq ' .ss \n[.ss] 0 .nh .ad l .de URL \fI\\$2\fP <\\$1>\\$3 .. .als MTO URL .if \n[.g] \{\ . mso www.tmac . am URL . ad l . . . am MTO . ad l . . . LINKSTYLE blue R < > .\} .SH "NUME" flock \- gestionează blocările din scripturi shell .SH "REZUMAT" .sp \fBflock\fP [opțiuni] \fIfișier\fP|\fIdirector\fP \fIcomanda\fP [\fIargumente\fP] .sp \fBflock\fP [opțiuni] \fIfișier\fP|\fIdirector\fP \fB\-c\fP \fIcomanda\fP .sp \fBflock\fP [opțiuni] \fInumăr\fP .SH "DESCRIERE" .sp Această utilitate gestionează blocările \fBflock\fP(2) din cadrul scripturilor de tip shell sau din linia de comandă. .sp Prima și a doua dintre formele de mai sus învăluie blocarea în jurul executării unei \fIcomenzi\fP, într\-un mod similar cu \fBsu\fP(1) sau \fBnewgrp\fP(1). Acestea blochează un \fIfișier\fP sau un \fIdirector\fP specificat, care este creat (presupunând permisiunile corespunzătoare) dacă nu există deja. În mod implicit, în cazul în care blocarea nu poate fi obținută imediat, \fBflock\fP așteaptă până când blocarea este disponibilă. .sp Cea de\-a treia formă utilizează un fișier deschis prin descriptorul de fișier \fInumăr\fP. A se vedea exemplele de mai jos pentru a afla cum poate fi utilizat. .SH "OPȚIUNI" .sp \fB\-c\fP, \fB\-\-command\fP \fIcomanda\fP .RS 4 Pasează o singură \fIcomandă\fP, fără argumente, către shell cu \fB\-c\fP. .RE .sp \fB\-E\fP, \fB\-\-conflict\-exit\-code\fP \fInumăr\fP .RS 4 Starea de ieșire utilizată atunci când se utilizează opțiunea \fB\-n\fP și există o blocare conflictuală sau când se utilizează opțiunea \fB\-w\fP și se depășește timpul de așteptare. Valoarea implicită este \fB1\fP. \fInumărul\fP trebuie să fie cuprins între 0 și 255. .RE .sp \fB\-F\fP, \fB\-\-no\-fork\fP .RS 4 Nu creează o bifurcație înainte de a executa \fIcomanda\fP. După execuție, procesul flock este înlocuit de \fIcomandă\fP, care continuă să dețină blocarea. Această opțiune este incompatibilă cu opțiunea \fB\-\-close\fP, deoarece altfel nu ar mai rămâne nimic care să păstreze blocajul. .RE .sp \fB\-e\fP, \fB\-x\fP, \fB\-\-exclusive\fP .RS 4 Obține o blocare exclusivă, denumită uneori blocare la scriere. Aceasta este opțiunea implicită. .RE .sp \fB\-n\fP, \fB\-\-nb\fP, \fB\-\-nonblock\fP .RS 4 Eșuează în loc să aștepte, dacă nu se poate obține imediat blocarea. A se vedea opțiunea \fB\-E\fP pentru starea de ieșire utilizată. .RE .sp \fB\-o\fP, \fB\-\-close\fP .RS 4 Închide descriptorul de fișier în care este deținut blocajul înainte de a executa \fIcomanda\fP. Acest lucru este util în cazul în care \fIcomanda\fP generează un proces\-copil care nu ar trebui să dețină blocarea. .RE .sp \fB\-s\fP, \fB\-\-shared\fP .RS 4 Obține o blocare partajată, denumită uneori blocare la citire. .RE .sp \fB\-u\fP, \fB\-\-unlock\fP .RS 4 Înlătură o blocare. De obicei, acest lucru nu este necesar, deoarece o blocare este eliminată automat atunci când fișierul este închis. Cu toate acestea, poate fi necesară în cazuri speciale, de exemplu, dacă grupul de comenzi închis a bifurcat un proces în fundal care nu ar trebui să dețină blocarea. .RE .sp \fB\-w\fP, \fB\-\-wait\fP, \fB\-\-timeout\fP \fIsecunde\fP .RS 4 Eșuează dacă blocarea nu poate fi obținută în \fIsecunde\fP. Sunt permise valorile fracționare zecimale. A se vedea opțiunea \fB\-E\fP pentru starea de ieșire utilizată. Numărul zero de \fIsecunde\fP este interpretat ca fiind \fB\-\-nonblock\fP. .RE .sp \fB\-\-fcntl\fP .RS 4 În loc de flock(2), aplică o blocare a descrierii fișierului deschis fcntl(2) (adică, utilizând comenzile F_OFD_SETLK (neblocare) sau F_OFD_SETLKW (blocare)). Aceste blocaje sunt independente de cele aplicate prin flock(2), dar, spre deosebire de blocajele tradiționale POSIX fcntl() (F_SETLK, F_SETLKW), au o semantică care corespunde celei a flock(2). .RE .sp Aceasta este disponibilă numai pe versiunile de nucleu >= 3.15. .sp \fB\-\-verbose\fP .RS 4 Raportează cât timp a durat obținerea blocării sau de ce nu a putut fi obținută. .RE .sp \fB\-h\fP, \fB\-\-help\fP .RS 4 Afișează acest mesaj de ajutor și iese. .RE .sp \fB\-V\fP, \fB\-\-version\fP .RS 4 Afișează versiunea și iese. .RE .SH "STARE DE IEȘIRE" .sp Comanda utilizează valorile de stare de ieșire pentru orice lucru, cu excepția cazului în care se utilizează oricare dintre opțiunile \fB\-n\fP sau \fB\-w\fP, care raportează un eșec de achiziționare a blocării cu o stare de ieșire dată de opțiunea \fB\-E\fP sau 1 în mod implicit. Starea de ieșire dată de \fB\-E\fP trebuie să fie cuprinsă între 0 și 255. .sp Atunci când se utilizează varianta \fIcomanda\fP și se execută comanda\-copil, atunci starea de ieșire este cea a comenzii\-copil. .SH "NOTE" .sp \fBflock\fP nu detectează blocajul blocării (deadlock). A se vedea \fBflock\fP(2) pentru detalii. .sp Unele sisteme de fișiere (de exemplu, NFS și CIFS) au o implementare limitată a \fBflock\fP(2) și este posibil ca «flock» să eșueze întotdeauna. Pentru detalii, consultați \fBflock\fP(2), \fBnfs\fP(5) și \fBmount.cifs\fP(8). În funcție de opțiunile de montare, «flock» poate eșua întotdeauna acolo. .SH "EXEMPLE" .sp Rețineți că „shell> ” din exemple este un prompt de linie de comandă. .sp shell1> flock /tmp \-c cat; shell2> flock \-w .007 /tmp \-c echo; /bin/echo $? .RS 4 Stabilește o blocare exclusivă a directorului \fI/tmp\fP și a doua comandă va eșua. .RE .sp shell1> flock \-s /tmp \-c cat; shell2> flock \-s \-w .007 /tmp \-c echo; /bin/echo $? .RS 4 Stabilește blocarea partajată la directorul \fI/tmp\fP și a doua comandă nu va eșua. Observați că încercarea de a obține o blocare exclusivă cu a doua comandă ar eșua. .RE .sp shell> flock \-x fișier\-blocare\-locală echo \*(Aqa b c\*(Aq .RS 4 Preia blocarea exclusivă „fișier\-blocare\-locală” înainte de a rula echo cu „a b c”. .RE .sp (; flock \-n 9 || exit 1; # ... comenzi executate sub blocare ...; ) 9>/var/lock/fișierul\-meu\-de\-blocare .RS 4 Formatul este convenabil în cadrul scripturilor shell. Modul utilizat pentru a deschide fișierul nu contează pentru \fBflock\fP; utilizarea \fI>\fP sau \fI>>\fP permite crearea fișierului de blocare dacă acesta nu există deja, însă este necesară permisiunea de scriere. Utilizarea \fI<\fP presupune ca fișierul să existe deja, dar este necesară doar permisiunea de citire. .RE .sp [ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock \-en "$0" "$0" "$@" || : .RS 4 Acesta este un cod auxiliar util pentru scripturile shell. Puneți\-l în partea de sus a scriptului shell pe care doriți să îl blocați și se va bloca automat la prima execuție. Dacă variabila de mediu \fB$FLOCKER\fP nu este definită la scriptul de shell care este rulat, atunci execută \fBflock\fP și obține o blocare exclusivă fără blocare (folosind scriptul însuși ca fișier de blocare) înainte de a se reexecuta cu argumentele corecte. De asemenea, stabilește variabila de mediu \fBFLOCKER\fP la valoarea corectă, astfel încât să nu se mai execute din nou. .RE .sp shell> exec 4<>/var/lock/fișierul\-meu\-de\-blocare; shell> flock \-n 4 .RS 4 Această formă este convenabilă pentru a bloca un fișier fără a genera un subproces. Shell\-ul deschide fișierul de blocare pentru citire și scriere ca descriptor de fișier 4, apoi se utilizează \fBflock\fP pentru a bloca descriptorul. .RE .SH "AUTORI" .sp .MTO "hpa\(atzytor.com" "H. Peter Anvin" "" .SH "DREPTURI DE AUTOR" .sp Drepturi de autor © 2003\-2006 H. Peter Anvin. Acesta este un software liber; consultați sursa pentru condițiile de copiere. Nu există nicio garanție; nici măcar pentru COMERCIALIZARE sau ADECVARE LA UN SCOP PARTICULAR. .SH "CONSULTAȚI ȘI" .sp \fBflock\fP(2), \fBfcntl\fP(2) .SH "RAPORTAREA ERORILOR" .sp Pentru rapoarte de eroare, folosiți \c .URL "https://github.com/util\-linux/util\-linux/issues" "sistemul de urmărire al erorilor" "." .SH "DISPONIBILITATE" .sp Comanda \fBflock\fP face parte din pachetul util\-linux care poate fi descărcat de la \c .URL "https://www.kernel.org/pub/linux/utils/util\-linux/" "Linux Kernel Archive" "."