关于文件寻找位置的问题

Sha*_*ang 2 linux winapi fseek seek

我之前的问题是关于原始数据的读写,但是出现了一个新问题,似乎没有结局....

问题是:函数的参数类似于lseek()或者fseek()都是4个字节.如果我想跨越4G,那是不可能的.我知道在Win32中有一个函数SetPointer(...,Hign, Low,....),这个指针可以生成64个字节的指针,这就是我想要的.

但是,如果我想在Linux或Unix中创建一个应用程序(创建一个文件或直接写入原始驱动器扇区),我如何移动到4G上的指针?

Thanx,等待你的回复......

caf*_*caf 6

偏移参数lseek是类型off_t.在32位编译环境中,此类型默认为32位有符号整数 - 但是,如果在所有系统包括之前使用此宏定义编译:

#define _FILE_OFFSET_BITS 64
Run Code Online (Sandbox Code Playgroud)

...然后off_t将是64位签名类型.

因为fseek,fseeko除了它使用off_t偏移类型之外,该函数是相同的,这允许上述解决方案也可以使用它.


Mat*_*att 5

4字节无符号整数可以表示最大值为4294967295,这意味着如果要移动超过4G,则需要使用lseek64().此外,您可以使用fgetpos()和fsetpos()来更改文件中的位置.