Последовательная программа на C, использующая клавиатуру и монитор вместо последовательного порта / dev/ttyUSBx

#c #linux #serial-port #tty

#c #linux #последовательный порт #tty

Вопрос:

Я пытаюсь написать программу, которая принимает ввод с клавиатуры и выводит вывод на экран, но действует так, как будто это последовательный порт. Я не уверен, что это вообще выполнимо. Мой текущий код для последовательного порта, который работает:

 int fd;
char *portname;
char buf[255];
struct termios tty;

portname = "/dev/ttyUSB0";

// opening serial port
fd = open(portname, O_RDWR | O_NOCTYY | O_SYNC );

//writing to serial port
write (fd, "hello!n", 7);

//Reading from serial port
read (fd, buf, 255)
 

Итак, возможно ли, что вместо установки имени порта как /dev/ttyUSB0 я устанавливаю его как что-то другое (например, /dev / stdin?), А Затем получаю точно такую же функциональность UART, но клавиатура установлена как ввод, а экран — как вывод?

Спасибо за вашу помощь.

Ответ №1:

UNIX / Linux настраивает stdin (fd 0), stdout (fd 1) и stderr (fd 2), которые уже открыты для терминала (будь то последовательная линия с реальным аппаратным терминалом, виртуальной консолью или графическим терминалом), к которому подключены ваша клавиатура и экран. Она доступна для управления termio и в качестве специального имени файла устройства /dev/tty . справочная страница termios routines termios (3) работает с уже открытым дескриптором fild, что позволяет получать атрибуты драйвера терминала, отключать канонический режим и позже сбрасывать значения в конце вашей программы.

Вы просто читаете / записываете как обычно, в POSIX все, что является файлом, будь то последовательная строка, диск, эмулятор терминала, абстрагируется от процесса, выполняющего ввод-вывод ядром ОС.