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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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...
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...
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...