#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 все, что является файлом, будь то последовательная строка, диск, эмулятор терминала, абстрагируется от процесса, выполняющего ввод-вывод ядром ОС.