How to read from serial in c ? (under linux)

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.