我刚才的问题是关于原始数据读取和写入,但一个新的问题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

这就是你所需要的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top