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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top