Перенаправление командной строки Linux с двумя c-файлами
-
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()
прежде чем полагаться на него.
Не связан с StackOverflow