Я проверял и с аппаратным RS-485, который через стандартный
/dev/ttySx подключен. Тоже все буферизуется - это ж на уровне ядра
уже! А с PL2303 еще хуже, т.к. он через USB, и там сначала на уровне пакетов USB может быть путаница с таймингами, а потом еще ядро буферизацию добавляет (даже без использования stdlib: чтобы те же cat /dev/ttySx показывали данные, в т.ч. и принятые недавно - даже если mtime в stty в нуль выставишь, есть еще и select, ожидающий данные и т.п.)…
Вот в моем адаптере на семь виртуальных устройств (как будет время, разведу печатную плату и в железе сделаю) тоже все, принятое с UART'ов помещается в циклический буфер и по мере возможности передается: https://github.com/eddyem/stm32samples/tree/master/F3%3AF303/Seven_CDCs Да, если скорость достаточно медленная, то каждый исходящий USB-пакет по байту будет содержать, а вот если большая, будет дробить. И никто там вообще пауз никаких не гарантирует (плюс, опять же, модуль ядра USB-CDC со своей стороны это будет тоже в буфер складывать, чтобы по запросу отдать).