Убедитесь, что приемник читает.
Вы должны обновить текущую позицию в вашем буфере из функции write () и продолжить следующую запись оттуда. (Применяется ко всем write (), независимо от того, является ли fd последовательным портом, сокетом tcp или файлом.)
Если вы получите сообщение об ошибке для последующих записей. Судя по man-странице, безопасно повторить записи для следующих ошибок: EAGAIN, EINTR и, вероятно, ENOSPC. Используйте perror (), чтобы увидеть, что вы получите. (.. и опубликовать его, мне любопытно.)
Казалось бы, EFBIG указывает на то, что вы пытаетесь писать, используя буфер (или, скорее, счетчик), который слишком велик, но, вероятно, намного больше, чем 64 КБ.
Если внутренний буфер заполнен, потому что вы пишете в fast, попробуйте (nano) немного поспать между операциями записи. Есть несколько умных способов сделать это (как это делает tcp), но если скорость известна, просто пишите с фиксированной скоростью.
Если вы считаете, что приемник на самом деле читает, но ничего особенного не происходит, взгляните на параметры управления потоком через последовательные порты и не подключен ли кабель для DTS / RTS.