Unix: Как очистить буфер ввода / вывода последовательного порта?

Я работаю над интерфейсом C ++ «высокого уровня» для стандартного последовательного порта ПК. Когда я открываю порт, я хотел бы очистить входной и выходной буферы, чтобы не получать и не отправлять данные из предыдущего использования порта. Для этого я использую функцию tcflush. Однако это не работает. Как это может быть? Мой код "открытия порта" можно увидеть ниже. Да, я использую исключения C ++, но ни одно из них не выдается. Это означает, что tcflush возвращает 0, но не очищает буфер.

Единственный способ очистить входной буфер - это прочитать байты из него, пока не останется ни одного. Обычно это занимает пару секунд, и я не думаю, что это решение.

Заранее спасибо :-)

fd = ::open(port.c_str(), O_RDWR | O_NOCTTY);

if (fd < 0)
{
    throw OpenPortException(port);
    return;
}

// Get options
tcgetattr(fd, &options);

// Set default baud rate 9600, 1 stop bit, 8 bit data length, no parity
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;

// Default timeout (1000 ms)
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 10;

// Additional options
options.c_cflag |= (CLOCAL | CREAD);

this->port = port;

// Apply the settings now
if (tcsetattr(fd, TCSANOW, &options) != 0)
{
    throw PortSettingsException();
}

// Flush the port
if (tcflush(fd, TCIOFLUSH) != 0)
{
    throw IOException();
}

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

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