Bash Pagina 108

De la Wiki Linux Advanced
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)
Sari la navigare Sari la căutare

Blocarea fișierelor și descriptori de fișiere

Blocarea fișierelor este o metodă utilizată pentru a preveni accesul simultan al mai multor procese la resursele partajate, precum fișierele. Aceasta este esențială pentru a evita conflictele și condițiile de cursă care pot apărea când mai multe instanțe ale unui script sau program accesează aceleași date.

Cea mai obișnuită utilizare a fișierelor de blocare

Fișierele de blocare se folosesc frecvent pentru a asigura că o a doua instanță a unui script nu rulează în paralel cu prima, consumând aceleași resurse sau modificând aceleași fișiere. Prin utilizarea fișierelor de blocare, putem evita conflictele între procese și preveni erori ce apar în timpul accesului simultan la resurse.

  • 1. Crearea unui fișier de blocare de bază

Un fișier de blocare de bază poate fi creat folosind comenzi simple în Bash pentru a controla accesul la o resursă. Exemple:

#!/bin/bash
lockfile="/tmp/script.lock"
if [ -e "$lockfile" ]; then
 echo "Scriptul este deja în execuție."
 exit 1
else
 touch "$lockfile"
 # Codul scriptului care utilizează resursele
 rm -f "$lockfile"
fi

Aici, fișierul de blocare (script.lock) este creat pentru a indica faptul că scriptul este deja în execuție. Dacă o altă instanță încearcă să ruleze, va detecta prezența fișierului și se va opri pentru a evita conflictul.

  • 2. Descriptori de fișiere

Descriptorii de fișiere sunt identificatori unici alocați de sistemul de operare pentru a reprezenta fișierele deschise de procese. Ei facilitează operațiile de citire și scriere și sunt de obicei reprezentați de numere întregi (e.g., 0 pentru stdin, 1 pentru stdout, și 2 pentru stderr).

Folosirea descriptorilor de fișiere permite o blocare mai complexă și funcționalitate avansată în gestionarea accesului la fișiere, prin aplicarea de blocări exclusive sau partajate, direct pe deschidere sau la o secțiune specifică din fișier.

3. Blocare exclusivă vs Blocare partajată

Blocarea fișierelor poate fi realizată în două moduri principale:

  • Blocare exclusivă (write lock): Permite unui singur proces să acceseze fișierul la un moment dat. Se folosește pentru a evita conflictele când un proces trebuie să modifice fișierul.
exec 200>/tmp/exclusive.lock
flock -x 200 || exit 1  # Blocare exclusivă pe descriptorul de fișier
# Cod care accesează exclusiv fișierul
flock -u 200            # Eliberare blocare
  • Blocare partajată (read lock): Permite accesul simultan al mai multor procese pentru citire. Aceasta este utilizată când accesul concurent nu afectează integritatea datelor.
exec 200>/tmp/shared.lock
flock -s 200 || exit 1  # Blocare partajată pe descriptorul de fișier
# Cod care accesează fișierul în mod partajat
flock -u 200            # Eliberare blocare

În concluzie, blocarea fișierelor este o practică esențială pentru a asigura accesul controlat la resurse în scripturi și aplicații. Folosind blocări exclusive și partajate și descriptorii de fișiere, putem preveni erorile cauzate de accesul simultan și putem garanta integritatea datelor.


Pagina anterioară | Următoarea pagină