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

POSIX C Discussion :

Processus: communication du fils vers le pere


Sujet :

POSIX C

  1. #1
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut Processus: communication du fils vers le pere
    Bonjour,

    J'ai fait un programme C dans lequel je duplique un processus. Dans le processus fils, je fais un chdir() qui me permet de deplacer dans un autre repertoire. Cependant, cette action n'affecte pas le pere, et a la mort du fils, je me retrouve a nouveau dans le repertoire ou j'etais. Comment pourrais-je faire pour appliquer ce changement au pere?

    Merci d'avance

  2. #2
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par Trunks
    Bonjour,

    J'ai fait un programme C dans lequel je duplique un processus. Dans le processus fils, je fais un chdir() qui me permet de deplacer dans un autre repertoire. Cependant, cette action n'affecte pas le pere, et a la mort du fils, je me retrouve a nouveau dans le repertoire ou j'etais. Comment pourrais-je faire pour appliquer ce changement au pere?

    Merci d'avance
    Avec un pipe par exemple, qui permet de faire discuter le père et son fils.
    Tu créés ton pipe, tu fork, le fils envoie le nouveau répertoire au père via le pipe, et le père fait un chdir.

    Ou alors, tu fais le chdir avant de faire le fork...
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  3. #3
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    Je n'ai pas le droit d'utiliser de pipe, et je ne peux pas le faire dans le pere ou juste avant, puisqu'en fait j'ecris un minishell. Le programme, verifie dans le fils la commande entree par l'utilisateur, et s'il s'agit de la commende cd, alors il faut changer de repertoire, ...
    Le pipe etait une bonne solution, mais cette fonction nous est interdite :/
    Merci quand meme pour ta solution.

  4. #4
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par Trunks
    Je n'ai pas le droit d'utiliser de pipe, et je ne peux pas le faire dans le pere ou juste avant, puisqu'en fait j'ecris un minishell. Le programme, verifie dans le fils la commande entree par l'utilisateur, et s'il s'agit de la commende cd, alors il faut changer de repertoire, ...
    Le pipe etait une bonne solution, mais cette fonction nous est interdite :/
    Merci quand meme pour ta solution.
    Si le fils est un shell, c'est normal que les modifications de son environnement ne se répercutent pas au père.
    Tu peux essayer avec bash par exemple. Si tu lances un sous-bash, que tu changes de répertoire et que tu quittes le sous-bash, normalement le bash principal n'aura pas changé de répertoire.

    Sinon, le fils peut écrire dans un fichier qui sera lu par le père. Ou tu peux utiliser les sockets, ou une mémoire partagée, ou tout autre système de communication interprocessus.
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  5. #5
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    Voici les seules fonctions auxquelles on a droit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chdir, fork, stat, lstat, fstat, open, read, write, execve, access, wait, waitpid, wait3, wait4, signal, kill
    En fait le pere aussi est un shell. Je vais et passer un bout de mon code pour que tu puisses mieux comprendre ce que je fais :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    void    my_minishell(char **environ)
    {
      char  *str;
      char  **params;
      pid_t pid;
      int   status;
     
      path = my_explode(":", my_get_path(environ));
      my_putstr("$> ");
      while ((str = my_get_next_line(0)) != NULL)
        {
          params = my_explode(" ", str);
          if ((pid = fork()) < 0)
            {
              perror("fork");
              exit(EXIT_FAILURE);
            }
          if (pid == 0)
            my_exec(params, environ);
          else
            {
              wait(&status);
              my_putstr("$> ");
            }
        }
    }
    Donc, dans un premier temps, je recupere la ligne de commande envoyee par l'utilisateur et je la traite dans le fils. Pour la plupart des commandes, je n'ai pas besoin d'intereagir avec le pere (ls, pwd, ..), mais pour d'autre si.
    Lorsque qu'un utilisateur utilise la commande cd, il faut que le pere sache qu'il faut qu'il change aussi de repertoire, car la mort du fils revient a finir de traiter la ligne de commande. UNe fois la commande traitee dans mon interpreteur, il fork a nouveau, ...

    Merci encore pour ton aide.

  6. #6
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    D'accord, je n'avais pas compris que tu faisais un fork pour chaque ligne...
    Bon, alors tu peux utiliser un fichier pour passer le chemin (open, write, read).
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  7. #7
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    Merci beaucoup, je vais le faire comme ca

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/10/2012, 21h34
  2. Réponses: 8
    Dernier message: 17/01/2010, 22h25
  3. Réponses: 8
    Dernier message: 09/11/2006, 14h01
  4. [MFC] multithread, communication père<->fils
    Par Joeleclems dans le forum MFC
    Réponses: 19
    Dernier message: 19/05/2005, 10h31
  5. Synchronisation inter objet (du fils vers le père)
    Par Yellowmat dans le forum MFC
    Réponses: 2
    Dernier message: 13/04/2005, 11h19

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