题
我刚才的问题是关于原始数据读取和写入,但一个新的问题arised,似乎没有结束......
的问题是:像lseek()
或fseek()
的功能的参数是所有4个字节。如果我想在4G移动的跨度,这是IMPOSIBLE。我知道在Win32中,有一个功能SetPointer(...,Hign, Low,....)
,这个指针可以生成64个字节的指针,这是我想要的。
但是,如果我想创建在Linux或Unix的应用程序(创建文件或直接写 原始驱动扇区),我怎样才能移动到指针移到4G?
感谢名单,等待您的答复...
解决方案
lseek
的偏移参数类型off_t
的。在32位编译环境,这种类型默认为一个32位带符号整数 - 然而,如果用该宏编译定义的所有系统包括前:
#define _FILE_OFFSET_BITS 64
...然后off_t
将是一个64位有符号的类型。
有关fseek
,所述fseeko
功能是不同之处在于它使用用于偏移的off_t
类型,它允许在上述溶液与它太工作相同。
其他提示
一个4字节的无符号整数可以表示值高达4294967295,如果要移动4G以上,这意味着,需要使用lseek64()。此外,可以使用fgetpos()和fsetpos()来改变该文件中的位置。
在Windows中,使用 _lseeki64()
,在Linux, lseek64()
。
我建议做这样的事情来使用这两个系统上lseek64()
:
#ifdef _WIN32
#include <io.h>
#define lseek64 _lseeki64
#else
#include <unistd.h>
#endif
这就是你所需要的。
不隶属于 StackOverflow