FITXERS COMPARTITS ENTRE PROCESSOS. BLOQUEIG DE FITXERS.

És possible que un procés, bloquegi un fitxer per llegir. Aleshores farà un bloqueig de lectura o bloqueig compartit: altres processos podran alhora bloquejar-lo per a llegir, encara que cap per a escriure.

L'altra possibilitat és bloquejar per escriure. Haurà de ser un bloqueig d'escriptura o bloqueig exclusiu: cap més procés llegirà ni escriurà a l'arxiu. És clar que un arxiu només pot estar sotmès a un sol bloqueig d'aquest tipus.

Una situació que es pot donar és que un procés bloquegi un arxiu i això provoqui un altre tipus de bloqueig: el d'un segon procés que s'esperi per a operar amb l'arxiu.

BLOQUEIG DE TOT EL FITXER

#include <sys/file.h>

int flock (int fd, int operació);

operació pot prendre els següents valors:

LOCK_SH Bloqueig compartit.
LOCK_EX Bloqueig exclusiu.
LOCK_UN Allibera un bloqueig sobre un arxiu.
LOCK_NB Es posa després de LOCK_SH| o de LOCK_SH| per tal de fer que el bloqueig no sigui bloquejant per al propi procés: és a dir que si vol el fitxer i no està disponible no s'esperi allà i continuï l'execució (probablement concloent-la).

Si va bé, flock retorna 0, si hi ha algun error, -1 (i errno contindrà el codi d'aquest error)

El següent programa, bloqueja el fitxer que li passem com a primer paràmetre en mode exclusiu al llarg de 20 segons i després el desbloqueja. Executeu-lo en background i inmediatament en primer pla. Què succeirà si treiem LOCK_NB de la crida?

BLOQUEIG D'UNA PART DEL FITXER

#include <unistd.h>

int lockf (int fd, int operació, off_t longitud);

longitud són els bytes a bloquejar des de la posició actual del cursor. Si val 0, equival a bloquejar tot el fitxer.

operació pot prendre els següents valors:

F_ULOCK Desbloqueja.
F_TLOCK Bloqueja una secció. Si ja està bloquejada, retorna error, no s'espera.
F_LOCK Bloqueja una secció. Si ja està bloquejada, s'espera.
F_TEST Comprova la presència d'un bloqueig (si hi és dóna error)

Si va bé, retorna 0, si hi ha algun error, -1 (i errno contindrà el codi d'aquest error).

Modifica el programa anterior per practicar amb bloquejos d'una part del fitxer.

 

 

Autor: Lluís València López

Creative Commons License
Aquesta obra està subjecta a una Llicència de Creative Commons.