Question

Je suis tout simplement nouveau dans les fonctions d'E/S de tuyauterie sous Linux.2 fichiers c ont été créés, le premier envoie des données :

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <unistd.h>

    int main(int argc, char* argv[])
    {
         int i = 0;

         for(;;)
         {
             printf("\nSent number: %d",i);
             i++;
             sleep(1);
             fflush(stdout);
         }

    return 0;
}

Le deuxième fichier reçoit le numéro imprimé et l'affiche :

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <unistd.h>

int main(int argc, char* argv[])
{    
    int x;

    for(;;)
    {
        scanf("%d",&x);
        printf("Received number: %d\n",x);
        sleep(1);
        fflush(stdout);
    }

    return 0;
}

Finalement j'essaye de rediriger les données du premier fichier vers le second avec :

./send_test.out | ./rcv_test.out

Le Terminal imprime à plusieurs reprises :"Numéro reçu :0", qu'est-ce que je fais de mal ?De plus, comment puis-je avoir des fenêtres de terminal pour les deux programmes exécutés simultanément tout en dirigeant la sortie de l'expéditeur vers le récepteur ?

Merci d'avance

Était-ce utile?

La solution

Vous n'envoyez pas le numéro dans un format que le destinataire peut comprendre.

Essayez de supprimer tout le texte sauf le %d à partir de la chaîne de formatage de l'expéditeur.

Vous devriez également vérifier la valeur de retour de scanf() avant de s'y fier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top