Comment verrouiller un fichier avec flock

Comment verrouiller un fichier avec flock - C++ - Programmation

Marsh Posté le 18-06-2007 à 18:58:08    

Salut tout le monde !
 
Voila, j'essaie depuis hier de verrouiller un fichier avec flock().
 
Je comprends pas, le verrou est bien posé, flock me renvoie 0, pourtant j'arrive à afficher le contenu du fichier et à le modifier.
 
J'ai été voir du coté de mandatory.txt, j'ai donc essayé de revoir mon code en utilisant fcntl. Sans succès :(
 
Donc si quelqu'un a dejà reussi à vérouiller un fichier, ce serait sympa de m'aider.
 
Merci
 
Mon code :
 

Code :
  1. //On ouvre le fichier
  2. int dFile = open(tempName, O_RDONLY);
  3. //On pose le verrou
  4. flock(dFile, LOCK_SH);
  5. //On effectue des actions sur le contenu du fichier
  6. /*
  7. [...]
  8. */
  9. //On le ferme
  10. flock(dFile, LOCK_UN);
  11. close(dFile);


 
Sauf que pendant l'exécution des actions, le fichier est "readable" par les autres processus, ce que je ne veux pas !


---------------
Au royaume des aveugles, les borgnes sont rois xo0
Reply

Marsh Posté le 18-06-2007 à 18:58:08   

Reply

Marsh Posté le 19-06-2007 à 09:23:32    

les lock sont coopératifs, sauf si tu montes ta partition en mandatory


Message édité par Taz le 19-06-2007 à 09:23:43
Reply

Marsh Posté le 19-06-2007 à 14:47:28    

Ah, j'avais vu un peu de ca dans mandatory.txt,
Mais ya moyen de passer outre avec lockf ou fcntl ?
 
Sinon, a quoi ca servirait de vérouiller un fichier ? Je veux dire que pour l'instant je n'ai pas vu de différences entre le moment ou je pose mon verrou et le moment ou je l'enlève.


---------------
Au royaume des aveugles, les borgnes sont rois xo0
Reply

Marsh Posté le 19-06-2007 à 16:11:21    

non. ça te sert à quoi d'ailleurs tout ça ?

Reply

Marsh Posté le 19-06-2007 à 16:33:54    

Enfait, je réalise un programme qui écrit un fichier bash pour ensuite l'exécuter, sauf que je voudrais que pendant l'exécution du code bash, le fichier ne soit pas accessible en lecture.
 
Donc, la seule facon de verrouiller un fichier avec flock, c'est de monter ma partoche en mandatory ? OK
 
Je voudrais savoir, s'il était possible de créer un fichier virtuel ? C'est a dire un fichier qui ne serais pas stocké sur le ddur mai que je pourrais quand même faire exécuter par bash.
 
On dit que sous Unix, tout est fichier, ca doit etre possible de faire ca non ?
Je pense plus précisément à l'utilisation d'un buffer par exemple.


Message édité par utb diablo le 19-06-2007 à 16:35:45

---------------
Au royaume des aveugles, les borgnes sont rois xo0
Reply

Marsh Posté le 20-06-2007 à 07:30:39    

Citation :

Je voudrais savoir, s'il était possible de créer un fichier virtuel ? C'est a dire un fichier qui ne serais pas stocké sur le ddur mai que je pourrais quand même faire exécuter par bash.
 
On dit que sous Unix, tout est fichier, ca doit etre possible de faire ca non ?
Je pense plus précisément à l'utilisation d'un buffer par exemple.


 
non ?


---------------
Au royaume des aveugles, les borgnes sont rois xo0
Reply

Marsh Posté le 20-06-2007 à 09:55:33    

Je vais peut-être poser une question conne ...  
Tu ne pourrais pas obtenir la même chose avec des droits sur le fichier ?

Reply

Marsh Posté le 20-06-2007 à 10:24:02    

utb diablo a écrit :

Citation :

Je voudrais savoir, s'il était possible de créer un fichier virtuel ? C'est a dire un fichier qui ne serais pas stocké sur le ddur mai que je pourrais quand même faire exécuter par bash.
 
On dit que sous Unix, tout est fichier, ca doit etre possible de faire ca non ?
Je pense plus précisément à l'utilisation d'un buffer par exemple.


 
non ?


fait un pipe :o

Reply

Marsh Posté le 20-06-2007 à 12:03:17    

Citation :

Je vais peut-être poser une question conne ...  
Tu ne pourrais pas obtenir la même chose avec des droits sur le fichier ?


 
Waip, si je trouve pas de soluce avec les verrous, je ferais comme ca.
 

Citation :

fait un pipe :o


 
J'aurais bien aimé mais,
 - si je fais un pipe, tout sera visible avec ps x
 - le code bash est contenu dans un array string, donc je vois mal comment faire un pipe là-dessus
 

Code :
  1. string array[4];
  2. array[0] = '#!/bin/sh';
  3. array[1] = '';
  4. array[2] = 'echo "Hello you !"';
  5. array[3] = 'exit';


 
PS : Je viens de tomber sur ce document, http://www.chez.com/vidalc/lf/socket.html#blocking
L'auteur utilise fcntl sur une partoche qui n'est pas (en tout cas, il n'en fait pas mention) en mandatory.
 
Si j'ai bien compris, les sockets sont traités comme n'importe que autre descripteur de fichier.
je comprends pas, pourquoi le monsieur il peut utiliser fcntl et pas moi :@


Message édité par utb diablo le 20-06-2007 à 14:30:53

---------------
Au royaume des aveugles, les borgnes sont rois xo0
Reply

Marsh Posté le 02-07-2007 à 10:59:56    

ah ouais donc tu ne sais pas ce que c'est qu'un pipe.

Reply

Marsh Posté le 02-07-2007 à 10:59:56   

Reply

Marsh Posté le 31-10-2007 à 19:03:45    

une pipe, je vois bien :P
mais un pipe non :)
 
C'est pas un truc du genre : cat fichier | grep foo ?


---------------
Au royaume des aveugles, les borgnes sont rois xo0
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed