IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Comment 2 processus peuvent lire simultanément sur un fichie


Sujet :

Linux

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Comment 2 processus peuvent lire simultanément sur un fichie
    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

  2. #2
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Imaginons le cas suivant (pseudo-code):
    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(....);
    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.

    Mais imagions le cas suivant:
    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(....);
    Dans ce cas, le fork a eu lieu avant l'ouverture. Chaque processus possede un descripteur pointant sur une entree differente de la TF.
    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.....

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    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

  4. #4
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [HELP] comment écrire et lire simultanément le même fichier via ssh
    Par jack-ft dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 11/03/2011, 12h37
  2. Réponses: 6
    Dernier message: 01/10/2009, 17h46
  3. [AJAX] Comment gérer des réponses ajax simultanées ?!
    Par jahjah92 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/09/2007, 21h48
  4. Réponses: 4
    Dernier message: 02/02/2007, 08h41
  5. Réponses: 6
    Dernier message: 08/04/2005, 03h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo