Поскольку вы инициализируете UART с параметром O_NDELAY
, read
возвращается немедленно, а printf
печатает содержимое неинициализированного массива, то есть мусора.
Чтение последовательной строки является сортировкой хитрого. По крайней мере, проверьте возвращаемое значение read
и завершите то, что было прочитано, 0 (помните, что printf
ожидает, что данные будут завершены 0, а read
не не добавляет терминатор) , по строкам
int characters = read(file, (void*)recieve,100);
if (characters == -1) {
handle_the_error();
}
receive[characters] = 0;
printf("%s", receive);
....
Кроме того, читать из закрытого файла нельзя. Выньте close(file);
из l oop.