Witam!

Na podstawie przykładowych programów napisałem program, który ma za zadanie przez RSa czytać dane z innego urządzenia. Funkcja otwierania portu

int open_device()
{
        QTextStream out(stdout);
        int fd=0;

        struct termios options;

        fd = open("/dev/ttyUSB0", O_RDWR | O_NDELAY | O_NOCTTY);
        if (fd == -1) {
            out << "nie moge otworzyc ttyUSB0" << endl;
            return 0;
        } else {
            out << "otwieram ttyUSB0" << endl;
            fcntl(fd, F_SETFL, 0);
        }

        tcgetattr(fd, &options);

        cfsetispeed(&options, B19200);
        cfsetospeed(&options, B19200);

        options.c_cflag |= (CLOCAL | CREAD);
        options.c_cflag &= ~PARENB;
        options.c_cflag &= ~CSTOPB;
        options.c_cflag &= ~CSIZE;
        options.c_cflag |= CS8;

        options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);

        tcflush(fd, TCIFLUSH);

        tcsetattr(fd, TCSANOW, &options);

        fcntl(fd, F_SETFL, 0);

        tcflush(fd,TCIOFLUSH);

        return fd;
}

do odczytu używam result = read(device, &data_result, 1); oczywiście dobieram ilość bajtów. Dane odczytywane są co sekundę. Program ten jest wpleciony w aplikację QT. Problem polega na tym, że czasem wszystko działa kilka minut, a czasem mniej. Zawiesza się zawsze przy odczycie. Czy powinienem w jakiś onny sposób ustawić flagi w fcntl? A może jest tego inna przyczyna?

z góry dzięki
pozdrawiam
herszt