You haven't told the tty after how many characters it should return from a blocking call:
options.c_cc[VMIN] = 20; // block until 20 characters are read
This topic gets very Linux specific, don't you think you should ask your questions on a Linux forum? Your questions have nothing to do with the Arduino platform.