Partage
  • Partager sur Facebook
  • Partager sur Twitter

read() et stdin

Sujet résolu
    24 juillet 2021 à 20:53:27

    Bonjour,

    Est il possible d utiliser echo comme argument dans mon ./colle-2 ? Je galère à trouver des solutions et du coup je me pose la question de savoir si cela est possible ... 

    $> echo "Ai je une chance d'avoir plus de 0?" | ./colle-2
    Aucune
    $>

    Merci d' avance !!

    -
    Edité par HAISULI 24 juillet 2021 à 21:04:03

    • Partager sur Facebook
    • Partager sur Twitter
      24 juillet 2021 à 21:17:03

      HAISULI a écrit:

      "Ai je une chance d'avoir plus de 0 ?"
      Aucune.

      • Partager sur Facebook
      • Partager sur Twitter
        24 juillet 2021 à 23:42:24

        Bon du coup j' ai trouvé un début de réponse. Cela m'a permis de printer la chaine de caractère passé dans echo. 

        $>echo "Bonjour" | ./a.out
        Bonjour
        $>
        #include <stdio.h>
        #include <stdlib.h>
        #include <unistd.h>
        
         int			main(void)
        {
        	char ch;
        	while(read(0, &ch, 1) > 0)
        	{
        		printf("%c", ch);
        	}
        
        	return (0);
        }
        
        Maintenant reste à savoir si je peux le faire sans la commande echo au début. Je pense que la clef se trouve dans le pipe 
        $>bonjour | ./colle-2
        bonjour               //retour attendu
        >
        • Partager sur Facebook
        • Partager sur Twitter
          25 juillet 2021 à 6:57:00

          Bonjour,

          on ne peut pas faire ce que tu décris :

          HAISULI a écrit:

          [...]
          Maintenant reste à savoir si je peux le faire sans la commande echo au début. Je pense que la clef se trouve dans le pipe 

          $>bonjour | ./colle-2
          bonjour               //retour attendu
          >

          Quand tu utilises un tube | tu connectes (en très gros) le stdout du premier programme au stdin du second. Et là il te faut un programme qui écrive dans stdout (en général le fichier de fd 1).

          Maintenant si tu veux passer des paramètres à une commande c'est beaucoup plus simple :

          #include <stdio.h>
          
          int main(int argc, char *argv[])
          {
              for(int i=0; i<argc; i++) {
                  printf("argument %i : '%s'\n", i, argv[i]);
              }
          
              return 0;
          }
          

          produira :

          $ ./param 1 2 "3 4" p*
          argument 0 : './param'
          argument 1 : '1'
          argument 2 : '2'
          argument 3 : '3 4'
          argument 4 : 'param'
          argument 5 : 'param.c'
          

          Pour plus d'explications fais une  recherche sur «comment passer des arguments à un programme en C» par exemple.



          • Partager sur Facebook
          • Partager sur Twitter
            25 juillet 2021 à 8:03:45

            White Crow a écrit:

            Quand tu utilises un tube | tu connectes (en très gros) le stdout du premier programme au stdin du second. Et là il te faut un programme qui écrive dans stdout (en général le fichier de fd 1).

            Merci pour la réponse. Et cela fait sens et rend les choses un peu plus clair. Du coup si je veux faire quelque chose comme ca:

            $>./carre 4 4
            o--o
            |  |
            |  |
            o--o
            $>./carre 4 4 | ./colle-2
            [carre] [4] [4]
            $>

            Dans ce cas, le pipe va m aider a lire le display de carre. Si j ai bien compris... 

            Je viens de me rendre compte que je dois lire de la même facon que la commande cat . Je vais cherher de ce côté voir si je trouve ma solution.

            UPDATE: La solution que j ai trouvé fonctionne aussi dans ce cas. Je ne sais pas pourquoi je ne m'en suis pass rendu compte tout de suite !!!! Bref... dans les cas Merci

            -
            Edité par HAISULI 26 juillet 2021 à 7:53:06

            • Partager sur Facebook
            • Partager sur Twitter

            read() et stdin

            × 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