#include <errno.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> ........... ........... int osc; int r; int flags; osc = open("/dev/ttyS1", O_RDWR); if (-1 == osc) { perror("open"); exit(1); } /* переводим в неблокирующий режим */ r = flags = fcntl(osc, F_GETFL); if (-1 == r) { perror("fcntl(GETFL)"); exit(1); } flags |= O_NONBLOCK; r = fcntl(osc, F_SETFL, flags); if (-1 == r) { perror("fcntl(SETFL)"); exit(1); } /* вычитываем "мусор" */ while (1) { char b; r = read(osc, &b, 1); if (1 == r) continue; if (-1 == r) { if (errno != EAGAIN) { perror("read()"); exit(1); } /* errno == EAGAIN, no more data */ break; } } /* переводим обратно в блокирующий режим*/ r = flags = fcntl(osc, F_GETFL); if (-1 == r) { perror("fcntl(GETFL)"); exit(1); } flags &= ~O_NONBLOCK; r = fcntl(osc, F_SETFL, flags); if (-1 == r) { perror("fcntl(SETFL)"); exit(1); } .... /* продолжаем нормальную работу */