我以前的问题是关于原始数据的读写,但是出现了一个新的问题,好像没有结局….
问题是:像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位有符号的类型。
对于fseek
, fseeko
函数是相同的,只是它使用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
这就是你所需要的。