2

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

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

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

谢谢,等待您的回复...

4

3 回答 3

6

的 offset 参数的lseek类型为off_t。在 32 位编译环境中,此类型默认为 32 位有符号整数 - 但是,如果您使用在所有系统包含之前定义的此宏进行编译:

#define _FILE_OFFSET_BITS 64

...然后off_t将是 64 位有符号类型。

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

于 2009-11-06T11:52:45.800 回答
5

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

于 2009-11-06T09:38:48.127 回答
2

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

我建议lseek64()通过执行以下操作在两个系统上使用:

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

这就是你所需要的。

于 2009-11-14T15:41:16.283 回答