Linux-Befehlszeilenumleitung mit 2 C-Dateien
-
23-12-2019 - |
Frage
Ich bin gerade neu in den Piping-I/O-Funktionen unter Linux.Es wurden 2 C-Dateien erstellt, die erste sendet Daten:
#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;
}
Die zweite Datei empfängt die gedruckte Nummer und zeigt sie an:
#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;
}
Schließlich versuche ich, die Daten von der ersten Datei in die zweite umzuleiten mit:
./send_test.out | ./rcv_test.out
Das Terminal druckt wiederholt:„Erhaltene Nummer:0", was mache ich falsch?Wie kann ich außerdem Terminalfenster für beide Programme gleichzeitig ausführen lassen, während die Ausgabe vom Sender zum Empfänger geleitet wird?
Dank im Voraus
Lösung
Sie „senden“ die Nummer nicht in einem Format, das der Empfänger verstehen kann.
Versuchen Sie, den gesamten Text außer dem zu entfernen %d
aus der Formatierungszeichenfolge des Absenders.
Außerdem sollten Sie den Rückgabewert von überprüfen scanf()
bevor man sich darauf verlässt.