Bonjour,
J'ai une petite question théorique :
comment 2 processus peuvent lire simultanément sur un fichier?
Comment cela se passe-t-il au niveau de l'inode, de la table des fichiers, etc...
merci beaucoup de me répondre.
Mathias
Bonjour,
J'ai une petite question théorique :
comment 2 processus peuvent lire simultanément sur un fichier?
Comment cela se passe-t-il au niveau de l'inode, de la table des fichiers, etc...
merci beaucoup de me répondre.
Mathias
Imaginons le cas suivant (pseudo-code):
Dans ce cas, fils et pere possedent chacun un descripteur de fichier qui pointe sur la meme entrée de la table des fichiers (duplication a cause du fork). Le compteur situé dans la TF est mis à 2. Puis, quand fils lit (4 octects, par exemple), alors l'offset est augmenté de 4. Ici, le probleme, c'est qu'on ne sait pas qui va lire en prmier... Si fic1 contient "abcdefgh", fils va lire soit "abcd", soit "efgh" (et pareil pour le pere). Le premier processus va deplacer la tete de lecture.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 open("fic1", O_RDONLY); if ( !fork()) /* fils */ read(....); else /* pere */ read(....);
Mais imagions le cas suivant:
Dans ce cas, le fork a eu lieu avant l'ouverture. Chaque processus possede un descripteur pointant sur une entree differente de la TF.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 if ( !fork()) /* fils */ open(fic1,.....); read(....); else /* pere */ open(fic1,.....); read(....);
Par contre, commme il y a deux entrees de la TF qui pointent sur la meme inode, le compteur de celle-ci (i_count) est mis à 2.
Mais du fait de deux entrees distinctes dans la TF, fils et pere ne se deplacent pas "mutuellement" l'offset : chacun va lire "abcd"....
J'espere avoir été clair (pas forcement evident à comprendre )
Si tu as des questions.....
Grand merci pouic, ton explication est limpide.
Tant d'heure de recherche sur google pour peu de résultat, et ici une réponse instantanée.
merci mille fois.
Mathias
Humm ... Temps qu'on y est ... Si on utilise open(), close(), read(), .... ca fait bel et bien ce qui est decrit par Pouic. Mais si on prends fopen(), fclose(), fscanf(), ..... la, il y a un des processus qui reste coherent et l'autre qui raconte n'importe quoi... Comment cela ce fais-ce ? Les pages de man ne me guident gueres
Qulequ'un pourrait-il m'eclairer sur ce point ? Merci
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager