Sunday, November 2, 2014

Linux lseek()

This system API advances the file position pointer for the next I/O.  Position can be specified as follow:

SEEK_CUR = current position + offset
SEEK_END = end of file + offset
SEEK_SET = beginning of file + offset

Note that offset can be 0, positive or negative.

When seeking beyond the end of file, READ will return EOF.  Write at that position will create a hole between the previous EOF point to the new data.  The hole will be filled with zeros but they will not occupy any space on disk.  The file becomes a sparse file.

The max file poisiton that lseek can go is defined as off_t type.  This is typically implemented as C long type (i.e. word size = size of the general purpose register).  In kernel, the position is kept as long long.

No comments: