Последовательный порт Linux: блокировка чтения с тайм-аутом

Я изучил много полезных тем и некоторые учебники, но яУ меня все еще есть проблемы с чем-то, что должно быть очень простым. Для справки вот некоторые темы, которые ямы прочитали:

Как реализовать тайм-аут при вызове функции чтения?

как открыть, читать и писать из последовательного порта в C

Во всяком случае, у меня есть небольшая проблема. Мой код работает нормально, если я получаю данные. Если я неt, функция read () останавливается, и единственный способ выйти из моей программы - использовать kill -9 (ПРИМЕЧАНИЕ. Я использую обработку сигналов для подачи сигнала потоку, считывающему последовательные данные, для завершения. Это не преступник вызов read () по-прежнему останавливается, даже если я удалил свою обработку сигналов). Что я'Я пытаюсь сделать, это иметь чтение, которое блокирует и читает порцию за раз (следовательно, экономит использование процессора), однако, если чтение не получает данных, я хочу 'Тайм-аут.

Вот настройки, которые ям подача заявки в порт:

struct termios serial_struct;
serial_struct.c_cflag = B115200 | CS8 | CLOCAL | CREAD;
serial_struct.c_iflag = IGNPAR;
serial_struct.c_oflag = 0;
serial_struct.c_lflag = 0;
serial_struct.c_cc[VTIME] = 1;  // timeout after .1s that isn't working
serial_struct.c_cc[VMIN] = 64;  // want to read a chunk of 64 bytes at a given time

Затем я устанавливаю эти настройки с помощью tcsetattr () и подтверждаю, что порт получил настройки через tcgetattr (). Я'Я думаю, что мои настройки могут конфликтовать, потому что мои чтения, кажется, блокируются и ждут, пока не будут получены 64 байта, но ничего не делают в отношении тайм-аута. Я понимаю, что могу использовать select (), чтобы справиться с таймаутом, но яЯ надеюсь избежать нескольких системных вызовов.

Как всегда, заранее спасибо за помощь.

Ответы на вопрос(1)

Ваш ответ на вопрос