OVH Cloud OVH Cloud

restriction d'accès à un fichier

1 réponse
Avatar
Allioth
Bonjour,

J'ai un script CGI qui écrit dans le fichier de paramètres
FILE_IN, ce fichier étant lui-même lu par un programme (appellons
le "PRG") qui est lancé ensuite par le même script CGI. Je veux que le
fichier de paramètre ne soit utilisé que par une seule exécution
du script CGI dans un même temps (pas plusieurs utilisateurs
simultanés).

J'utilise donc "flock" sur FILE_IN pendant sont écriture mais je dois
le "unlocker" pour permettre sa lecture par PRG (qui est donc un
precess fils de mon script CGI), donc qqun peut écrire dans le fichier
FILE_IN lors de l'éxécution de PRG, ce que je ne veux pas. Je ne vois
pas quelle solution envisager. QQun a t il une idée ?

Merci d'avance.

D.

1 réponse

Avatar
no
On Fri, 04 Jun 2004 17:45:22 +0200, Allioth wrote:


J'ai un script CGI qui écrit dans le fichier de paramètres
FILE_IN, ce fichier étant lui-même lu par un programme (appellons le
"PRG") qui est lancé ensuite par le même script CGI. Je veux que le
fichier de paramètre ne soit utilisé que par une seule exécution du
script CGI dans un même temps (pas plusieurs utilisateurs simultanés).

J'utilise donc "flock" sur FILE_IN pendant sont écriture mais je dois
le "unlocker" pour permettre sa lecture par PRG (qui est donc un precess
fils de mon script CGI), donc qqun peut écrire dans le fichier FILE_IN
lors de l'éxécution de PRG, ce que je ne veux pas. Je ne vois pas quelle
solution envisager. QQun a t il une idée ?



De toutes façon, on pourra toujours écrire dans un fichier « locké ».

Un « lock » ne sert que si toutes les applications qui accedent au
fichier utilisent elle aussi la même méthode de « locking ». Car un
appel système `open()' n'a pas de notion de « lock ».

Dans ton cas, tu n'es pas obligé d'unlocker le fichier car ton process
fils hérite des descripteurs de fichier du père. Tu devrais donc
pouvoir faire simplement un fseek() pour te positionner au début du
fichier et le lire normalement en gardant le lock.

Je pense qu'une méthode serait d'utiliser un fichier temporaire dont
l'accès serait interdit à tous sauf ton utilisateur, et ensuite de
renommer ce fichier vers le fichier final. Comme ça, personne ne pourra
modifier le fichier pendant son traitement, et les modification qu'ils
auraient pu apporter au fichier pendant ton traitement seront écrasé par
ton fichier temporaire...