如何使用使用 _FILE_OFFSET_BITS 64 编译的应用程序创建一个小文件(大小 <= 64GB)文件?



当应用程序使用_FILE_OFFSET_BITS 64 功能测试宏编译时,所有旧的 32 位接口系统调用(如 creat/open/lseek 等(都将替换为新的 64 位接口系统调用(如 creat64/open64/lseek64 等(。因此,我的应用程序中的 creat(( 调用会创建一个大文件(大小> 2GB(。但是,是否可以使用使用 _FILE_OFFSET_BITS<64 编译的相同应用程序创建小文件(大小 = 64GB(?

因此,我的应用程序中的 creat(( 调用会创建一个大文件(大小> 2GB(。

不,它没有。creat()始终创建一个空文件(或截断现有文件(。

你可以编写一个专门用-D_FILE_OFFSET_BITS=32编译的creat包装器函数。 这将为您提供一个文件描述符,该描述符仅限于 32 位文件大小。 但是,这仅适用于某些 32 位环境。

还有RLIMIT_FSIZE,可以使用setrlimit设置,但我不知道它有多可靠。

最新更新