I am writing an application to read data from /dev/ttyUSB0. 
I found it necessary to call sleep before calling read in the while loop so that I get the entire line at once. Otherwise, sometimes I get part of the line and the rest in the next iteration. 
Do I have to package my data with a header containing the length of the string being sent over? Or is there a better way?
    while(1) {
            usleep(10000);
            unsigned char buf[80];
            int rdlen;
            ioctl(fd, FIONREAD, &rdlen);
            if (rdlen > 0) {
                    rdlen = read(fd, buf, rdlen);
            }
            if (rdlen > 0) {
            ...     
    }