FLOCK(1) Comenzi utilizator FLOCK(1) NUME flock - gestioneaza blocarile din scripturi shell REZUMAT flock [opiuni] fiier|director comanda [argumente] flock [opiuni] fiier|director -c comanda flock [opiuni] numar DESCRIERE Aceasta utilitate gestioneaza blocarile flock(2) din cadrul scripturilor de tip shell sau din linia de comanda. Prima i a doua dintre formele de mai sus invaluie blocarea in jurul executarii unei comenzi, intr-un mod similar cu su(1) sau newgrp(1). Acestea blocheaza un fiier sau un director specificat, care este creat (presupunand permisiunile corespunzatoare) daca nu exista deja. In mod implicit, in cazul in care blocarea nu poate fi obinuta imediat, flock ateapta pana cand blocarea este disponibila. Cea de-a treia forma utilizeaza un fiier deschis prin descriptorul de fiier numar. A se vedea exemplele de mai jos pentru a afla cum poate fi utilizat. OPIUNI -c, --command comanda Paseaza o singura comanda, fara argumente, catre shell cu -c. -E, --conflict-exit-code numar Starea de ieire utilizata atunci cand se utilizeaza opiunea -n i exista o blocare conflictuala sau cand se utilizeaza opiunea -w i se depaete timpul de ateptare. Valoarea implicita este 1. numarul trebuie sa fie cuprins intre 0 i 255. -F, --no-fork Nu creeaza o bifurcaie inainte de a executa comanda. Dupa execuie, procesul flock este inlocuit de comanda, care continua sa deina blocarea. Aceasta opiune este incompatibila cu opiunea --close, deoarece altfel nu ar mai ramane nimic care sa pastreze blocajul. -e, -x, --exclusive Obine o blocare exclusiva, denumita uneori blocare la scriere. Aceasta este opiunea implicita. -n, --nb, --nonblock Eueaza in loc sa atepte, daca nu se poate obine imediat blocarea. A se vedea opiunea -E pentru starea de ieire utilizata. -o, --close Inchide descriptorul de fiier in care este deinut blocajul inainte de a executa comanda. Acest lucru este util in cazul in care comanda genereaza un proces-copil care nu ar trebui sa deina blocarea. -s, --shared Obine o blocare partajata, denumita uneori blocare la citire. -u, --unlock Inlatura o blocare. De obicei, acest lucru nu este necesar, deoarece o blocare este eliminata automat atunci cand fiierul este inchis. Cu toate acestea, poate fi necesara in cazuri speciale, de exemplu, daca grupul de comenzi inchis a bifurcat un proces in fundal care nu ar trebui sa deina blocarea. -w, --wait, --timeout secunde Eueaza daca blocarea nu poate fi obinuta in secunde. Sunt permise valorile fracionare zecimale. A se vedea opiunea -E pentru starea de ieire utilizata. Numarul zero de secunde este interpretat ca fiind --nonblock. --fcntl In loc de flock(2), aplica o blocare a descrierii fiierului deschis fcntl(2) (adica, utilizand 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 tradiionale POSIX fcntl() (F_SETLK, F_SETLKW), au o semantica care corespunde celei a flock(2). Aceasta este disponibila numai pe versiunile de nucleu >= 3.15. --verbose Raporteaza cat timp a durat obinerea blocarii sau de ce nu a putut fi obinuta. -h, --help Afieaza acest mesaj de ajutor i iese. -V, --version Afieaza versiunea i iese. STARE DE IEIRE Comanda utilizeaza valorile de stare de ieire pentru orice lucru, cu excepia cazului in care se utilizeaza oricare dintre opiunile -n sau -w, care raporteaza un eec de achiziionare a blocarii cu o stare de ieire data de opiunea -E sau 1 in mod implicit. Starea de ieire data de -E trebuie sa fie cuprinsa intre 0 i 255. Atunci cand se utilizeaza varianta comanda i se executa comanda-copil, atunci starea de ieire este cea a comenzii-copil. NOTE flock nu detecteaza blocajul blocarii (deadlock). A se vedea flock(2) pentru detalii. Unele sisteme de fiiere (de exemplu, NFS i CIFS) au o implementare limitata a flock(2) i este posibil ca <> sa eueze intotdeauna. Pentru detalii, consultai flock(2), nfs(5) i mount.cifs(8). In funcie de opiunile de montare, <> poate eua intotdeauna acolo. EXEMPLE Reinei ca ,,shell> " din exemple este un prompt de linie de comanda. shell1> flock /tmp -c cat; shell2> flock -w .007 /tmp -c echo; /bin/echo $? Stabilete o blocare exclusiva a directorului /tmp i a doua comanda va eua. shell1> flock -s /tmp -c cat; shell2> flock -s -w .007 /tmp -c echo; /bin/echo $? Stabilete blocarea partajata la directorul /tmp i a doua comanda nu va eua. Observai ca incercarea de a obine o blocare exclusiva cu a doua comanda ar eua. shell> flock -x fiier-blocare-locala echo 'a b c' Preia blocarea exclusiva ,,fiier-blocare-locala" inainte de a rula echo cu ,,a b c". (; flock -n 9 || exit 1; # ... comenzi executate sub blocare ...; ) 9>/var/lock/fiierul-meu-de-blocare Formatul este convenabil in cadrul scripturilor shell. Modul utilizat pentru a deschide fiierul nu conteaza pentru flock; utilizarea > sau >> permite crearea fiierului de blocare daca acesta nu exista deja, insa este necesara permisiunea de scriere. Utilizarea < presupune ca fiierul sa existe deja, dar este necesara doar permisiunea de citire. [ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" || : Acesta este un cod auxiliar util pentru scripturile shell. Punei-l in partea de sus a scriptului shell pe care dorii sa il blocai i se va bloca automat la prima execuie. Daca variabila de mediu $FLOCKER nu este definita la scriptul de shell care este rulat, atunci executa flock i obine o blocare exclusiva fara blocare (folosind scriptul insui ca fiier de blocare) inainte de a se reexecuta cu argumentele corecte. De asemenea, stabilete variabila de mediu FLOCKER la valoarea corecta, astfel incat sa nu se mai execute din nou. shell> exec 4<>/var/lock/fiierul-meu-de-blocare; shell> flock -n 4 Aceasta forma este convenabila pentru a bloca un fiier fara a genera un subproces. Shell-ul deschide fiierul de blocare pentru citire i scriere ca descriptor de fiier 4, apoi se utilizeaza flock pentru a bloca descriptorul. AUTORI H. Peter Anvin DREPTURI DE AUTOR Drepturi de autor (C) 2003-2006 H. Peter Anvin. Acesta este un software liber; consultai sursa pentru condiiile de copiere. Nu exista nicio garanie; nici macar pentru COMERCIALIZARE sau ADECVARE LA UN SCOP PARTICULAR. CONSULTAI I flock(2), fcntl(2) RAPORTAREA ERORILOR Pentru rapoarte de eroare, folosii sistemul de urmarire al erorilor . DISPONIBILITATE Comanda flock face parte din pachetul util-linux care poate fi descarcat de la Linux Kernel Archive . util-linux 2.41 2025-03-29 FLOCK(1)