Проверьте коммуникационный адаптер какой-либо терминальной программой (tip, cu). Если с портом все в порядке, то скорее всего, вы забыли перевести поток в raw-режим. Посмотрите страницы Справочника по terminfo, stty.
Для эффективной работы также посмотрите системный вызов poll/select.