Applied DIRECT_IO to bypass the OS buffer

DIRECT_IO requires that both (1)the beginning address of the reading
data [in lseek() API] (2)the reading length [in read() API] should be a
multiple of 512. So if the offset of a particular data is not align with
512, the offset' for lseek() should be adjusted. Don't forget that the
reading length has to be adjusted too. After that, the pointer pList (in
class ListHandler) should be re-assigned.