Redirection de ligne de commande Linux avec 2 fichiers C
-
23-12-2019 - |
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
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.