关于档案寻找职位的问题

我以前的问题是关于原始数据的读写,但是出现了一个新的问题,好像没有结局….

问题是:像lseek()fseek()这样的函数的参数都是4个字节。 如果我想移动跨越4G,这是不可能的。 我知道在Win32中,有一个函数SetPointer(...,Hign, Low,....) ,这个指针可以产生64字节的指针,这就是我想要的。

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

Thanx,等待你的回复…

lseek的偏移参数类型是off_t 。 在32位编译环境中,此类型默认为32位有符号整数 – 但是,如果在所有系统包含以下操作之前定义了此宏,

 #define _FILE_OFFSET_BITS 64 

…然后off_t将是一个64位有符号的类型。

对于fseekfseeko函数是相同的,只是它使用off_t类型的偏移量,这使得上述解决方案也可以使用它。

一个4字节的无符号整数可以代表一个高达4294967295的值,这意味着如果你想要移动超过4G,你需要使用lseek64()。 另外,可以使用fgetpos()和fsetpos()更改文件中的位置。

在Windows上,在Linux上使用_lseeki64()lseek64()

我建议在两个系统上使用lseek64()做这样的事情:

 #ifdef _WIN32 #include <io.h> #define lseek64 _lseeki64 #else #include <unistd.h> #endif 

这就是你所需要的。