Перенаправление командной строки Linux с двумя c-файлами

StackOverflow https://stackoverflow.com//questions/23055369

  •  23-12-2019
  •  | 
  •  

Вопрос

Я просто новичок в функциях конвейерного ввода-вывода в Linux.Было сделано 2 c-файла, первый отправляет данные:

    #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;
}

Второй файл получает напечатанный номер и отображает его:

    #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;
}

Наконец, я пытаюсь перенаправить данные из первого файла во второй с помощью:

./send_test.out | ./rcv_test.out

Терминал неоднократно печатает:"Полученный номер:0", что я делаю не так?Кроме того, как я могу использовать оконные терминалы для обеих программ, работающих одновременно, направляя вывод от отправителя к получателю?

заранее спасибо

Это было полезно?

Решение

Вы не «отправляете» номер в формате, понятном получателю.

Попробуйте удалить весь текст, кроме %d из строки форматирования отправителя.

Кроме того, вы должны проверить возвращаемое значение scanf() прежде чем полагаться на него.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top