Search code examples
linuxwinapiseekfseek

Question about file seeking position


My previous Question is about raw data reading and writing, but a new problem arised, it seems there is no ending....

The question is: the parameters of the functions like lseek() or fseek() are all 4 bytes. If i want to move a span over 4G, that is imposible. I know in Win32, there is a function SetPointer(...,Hign, Low,....), this pointers can generate 64 byte pointers, which is what i want.

But if i want to create an app in Linux or Unix (create a file or directly write the raw drive sectors), How can I move to a pointer over 4G?

Thanx, Waiting for your replies...


Solution

  • The offset parameter of lseek is of type off_t. In 32-bit compilation environments, this type defaults to a 32-bit signed integer - however, if you compile with this macro defined before all system includes:

    #define _FILE_OFFSET_BITS 64
    

    ...then off_t will be a 64-bit signed type.

    For fseek, the fseeko function is identical except that it uses the off_t type for the offset, which allows the above solution to work with it too.