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 :

Gestion de plusieurs processus (fork)


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Par défaut Gestion de plusieurs processus (fork)
    Amis du soir bonsoir(du jour bonjour : p)
    J'ai un projet assez complexe à rendre qui requiert l'aide de personne étant habitué aux fork().

    Ce projet consiste en la création de nb processus qui devront chacun lire un morceau de fichier et le modifier.

    Mon souci réside dans les appels de fork() justement. Comment peut-on créer un nombre variable de processus fils et leurs demander à chacun de lire mais à un endroit différent sur le fichier ?

    J'ai déjà utilisé fork à de nombreuse reprise mais avec un nombre fini de processus fils et mes professeurs n'ont donné aucunes directives, aucun indices ni aucune documentation...

    J'aimerais donc un peu d'aide pour la mise au point d'un algorithme créant nb processus fils et ou chaque processus peut lire un fichier mais à une position différente.

    J'espère qu'une âme bénéfique pourra m'aider.

  2. #2
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    / * pseudo code*/
     
    /* Pere ouvre le fichier*/
    int fd = open("titi", O_RDWR | 0644);
     
    while(/* tq fin de fichier non atteint*/){
     if(fok() == 0){
      /* fils modifie le fichier*/
      return 0;
     }
     /* fait un lseek() avec SEEK_CUR pour déplacer le pointeur de fichier*/
     
    }
     
    close(fd);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Par défaut
    merci pour ce tuyau.

    Je me demande si en faisant cela, étant donné que les fils n'opèrent pas forcement dans le même ordre, cela ne risque pas d'engendrer des conflit ?

    admettons que je fasse 2 fils.
    par exemple
    f1 doit lire les caractères de 1 à 30 et f2 de 31 a 60

    f1 lis 3 caractères, et f2 lis 3 caractères et donc décale le curseur sur le fichier pour f1 qui a du coup zappé 3 caractères.

    étant donné que les fils partagent les même descripteurs de fichiers je me demande donc si ça n'engendre aucun conflit.

  4. #4
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Citation Envoyé par izakiel Voir le message
    merci pour ce tuyau.

    Je me demande si en faisant cela, etant donné que les fils l'opèrent pas forcement dans le même ordre, cela ne risque pas d'engendrais des conflit ?

    admettons que je fasse 2 fils.
    par exemple
    f1 doit lire les caractère de 1 à 30 et f2 de 31 a 60

    f1 lis 3 caractère, et f2 lis 3 caractère et donc décale le curseur sur le fichier pour f1 qui a du coup zapper 3 caractère.

    étant donné que les fils partage les même descripteur de fichiers je me demande donc si ca n'engendre aucun conflit

    L'idée de l'algo est que chaque modif soit faite d'une manière atomique par un proc fils. C'est à dire un fils, il arrive, il fait son boulot et il se casse , d'où l'idée du return 0.
    La gestion de l'offset est gérée uniquement par le père. Donc à toi de gérer les fins de fichier.
    Il y'a un dernier point à soulever concernant ce code, c'est la synchronisation. Il peut arriver qu'une fois le fils créé qu'il ne prenne pas tout de suite la main et que le père lui modifie l'offset. Cela impliquera, qu'une fois élu, le fils récupèrera le mauvais offset du fichier.
    Pour "forcer" l'exécution du fils avant le père, il est conseillé de mettre avant le lseek, un wait(NULL), ce qui forcera le père à attendre la fin de son fils.


    J'espère t'avoir bien aidé

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Par défaut
    Et bien cela est plus claire en effet ^^

    je vais tenter de faire quelque chose de propre.

    J'en ai aussi profité pour corriger mes fautes affreuses du post précédent
    (à force de cracher du code on oubli l'orthographe : p)
    Je me permet de laisser ce sujet en suspens au cas ou j'aurais encore un souci.
    Merci de m'aider à avancer en tout cas.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/03/2006, 20h24
  2. [FLASH MX] Gestion de Plusieurs Clips Identiques
    Par Darkdaemons dans le forum Flash
    Réponses: 2
    Dernier message: 18/01/2006, 19h06
  3. Réponses: 12
    Dernier message: 13/01/2006, 10h14
  4. [DEBUTANT]Lancer plusieurs processus
    Par demontools dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 10/04/2005, 13h48
  5. Réponses: 8
    Dernier message: 06/07/2004, 14h17

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