Partage
  • Partager sur Facebook
  • Partager sur Twitter

programme en C sous linux

Sujet résolu
    15 mai 2019 à 23:12:08

    Bonjour,

    J'essaie actuellement de réaliser un petit programme en c sous linux qui : 

    - Reçoit via la ligne de commande une commande avec paramètres

    - Passe la commande à un processus fils

    - Le fils l'exécute et renvoie les résultats au père

    - Finale le père affiche les résultats

    J'ai pensé commencer par créer un processus fils  , mais je ne vois pas comment lui envoyer la commande ??

    #include <stdlib.h>
    
    #include <stdio.h>
    
    #include <unistd.h>
    
    #include <errno.h>
    
    #include <assert.h>
    
    #include <sys/types.h>
    
    int main(void)
    
    {
    
        pid_t pid_fils;
    
        do {
    
    pid_fils = fork();
    
        } while ((pid_fils == -1) && (errno == EAGAIN));
    
        if (pid_fils == -1) {
    
    perror("fork");
    
        } else if (pid_fils == 0) {
    
    printf("AFFICHER LA COMMANDE");
    
        } 
    
        return EXIT_SUCCESS;
    
    }





    -
    Edité par alpha98 16 mai 2019 à 10:36:12

    • Partager sur Facebook
    • Partager sur Twitter
      16 mai 2019 à 8:12:40

      plz utilise le bouton </> pour afficher le code.

      Tu as deux possibilitées :

      • la premiere tu lis la commande et ensuite tu créait le fils qui va l'executer, c'est ce qui est le plus logique et le plus facile.
      • la seconde tu creait le fils  (comme tu le fait là) ensuite tu attend une commande et tu la transmet au fils grace à un pipe (ou une memoire partagé).
      Quoi qu'il en soit le retour doit se faire par pipe aussi (ou memoire partagé).
      • Partager sur Facebook
      • Partager sur Twitter

      la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

      Mon GitHub

        16 mai 2019 à 11:33:38

        Merci de ton aide, 

        Dernier problème, je ne comprend pas comment envoyer le résultat du fils au père :/

        Peux-tu m'aider ? 

        #include <stdlib.h>
        #include <stdio.h>
        #include <unistd.h>
        #include <errno.h>
        #include <sys/types.h>
        #include <sys/wait.h>
        
        
        pid_t create_process(void)
        {
            
            pid_t pid;
        
            do {
        	pid = fork();
            } while ((pid == -1) && (errno == EAGAIN));
        
            return pid;
        }
        
        void son_process(char *arg[])
        {
            if (execv("/usr/bin/baobab", arg) == -1) {
          	perror("execv");
        	exit(EXIT_FAILURE);
            }
        }
        
        
        int main(int argc, char *argv[])
        {
            char *arg[] = { "baobab", argv[1], NULL };
            pid_t pid = create_process();
        
           if (pid == -1) {
         
        	perror("fork");
         
            } 
        	else if (pid == 0) {
         	/* On est dans le fils */
        	son_process(arg);
         
            }
         
        
            return EXIT_SUCCESS;
        }



        • Partager sur Facebook
        • Partager sur Twitter
          16 mai 2019 à 14:08:32

          il te manque les pipe comme je te disais il te faut des pipes ça sert à faire communiquer deux processus ensemble tels qu'un pere et son fils
          • Partager sur Facebook
          • Partager sur Twitter

          la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

          Mon GitHub

          programme en C sous linux

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown