Partage
  • Partager sur Facebook
  • Partager sur Twitter

Redirection sortante avant un pipe dans cat

echo a > file | cat

    16 septembre 2021 à 17:06:54

    Bonjour,

    Je suis en train de réécrire un shell basique avec la prise en compte de redirections et de pipes.

    Le fonctionnement du programme doit être basé sur bash mais j’ai un peu de mal à implémenter le fonctionnement suivant :

    echo a > file | cat

    Dans ce cas de figure bash écrira 'a' dans file et cat n'écrira rien sur le stdout.

    De ce que je comprends, le pipe dans le cas actuel ne sert à rien vu que echo est redirigé vers file. Inutile donc d'utiliser la fonction pipe(), je peux directement exécuter la fonction cat. Le problème que je rencontre c’est qu’en l’état, cat attend une entrée sur le stdin et ne retourne donc pas tant que je n’envoie pas le EOF. Fonctionnement standard de cat sans arguments donc alors que sous bash cat retourne directement.

    Voici un petit exemple de code pour tester le fonctionnement :

    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    
    int main(void) {
        char const *c1[] = {"/bin/echo", "a", NULL};
        char const *c2[] = {"/bin/cat", NULL};
    
        int fd[2];
        int pid;
        int openfd;
    
        pid = fork();
        if (pid == 0)
        {
            openfd = open("file", O_RDWR | O_CREAT, 0644);
            dup2(openfd, 1);
            execve(c1[0], (char * const*) c1, NULL);
        }
    
        pid = fork();
        if (pid == 0)
        {
            execve(c2[0], (char * const*) c2, NULL);
        }
        
        for (int i = 0; i < 2; i++)
            wait(NULL);
    
        return (0);
    }


    Avez-vous une idée de comment je pourrais gérer ce cas de figure ?

    Merci à vous !

    -
    Edité par lae007 16 septembre 2021 à 18:39:51

    • Partager sur Facebook
    • Partager sur Twitter
      5 octobre 2021 à 11:25:05

      une idée simple serait de compter les arguments dans ton cas pas d'argument donc return 0

      mais si tu dois recréer un shell, ça veut dire que tu dois prendre les param depuis une saisie clavier, non ?
      je te dis ça cat pour moi ton programme ne fait pas :

      echo a > file | cat

      mais plutot

      echo a > ; cat

      dans ton cas tu ne redirige pas du tout la sortie de `echo a > file` dans `cat` et c'est pour ça que ça ne marche pas


      -
      Edité par ox223252 5 octobre 2021 à 11:28:12

      • Partager sur Facebook
      • Partager sur Twitter

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

      Un tuto sur les makefile et mon GitHub

      Redirection sortante avant un pipe dans cat

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      • Editeur
      • Markdown