当应用程序使用_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
设置,但我不知道它有多可靠。