Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用使用_file_OFFSET_BITS 64编译的应用程序创建一个小文件(大小<;=2GB)?_Linux_Posix_Posix Api - Fatal编程技术网

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

Linux 如何使用使用_file_OFFSET_BITS 64编译的应用程序创建一个小文件(大小<;=2GB)?,linux,posix,posix-api,Linux,Posix,Posix Api,使用_FILE_OFFSET_BITS 64 feature test宏编译应用程序时,所有旧的32位接口系统调用(如creat/open/lseek等)将替换为新的64位接口系统调用(如creat64/open64/lseek64等)。因此,我的应用程序中的create()调用会创建一个大文件(大小>2GB)。但是,是否可以创建小文件(大小) 因此,我的应用程序中的create()调用会创建一个大文件(大小>2GB) 不,不会。create()总是创建一个空文件(或截断现有文件).您可以编写一

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


不,不会。
create()
总是创建一个空文件(或截断现有文件).

您可以编写一个
创建
包装器函数,该函数专门使用
-D\u FILE\u OFFSET\u BITS=32
编译。这将为您提供一个文件描述符,该描述符限制为32位文件大小。但是,这仅适用于某些32位环境


还有
RLIMIT\u FSIZE
,可以使用
setrlimit
设置,但我不知道它有多可靠。

是什么让你认为creat()在这种情况下,将生成大于2GB的文件?此配置更改了可处理文件的大小限制。从内存中也会对seek接口进行一些更改。请记住,使用
\u file\u OFFSET\u BITS 64
唯一更改的是数据的范围(一些手动放弃)。对于32位,数据范围是
[0,2^32]
。对于64位,数据类型是两倍大,数据范围是
[0,2^64]
.0在32位和64位机器上都可用。我计划编写一个小实用程序,通过创建/打开目标文件并写入来读取源文件并复制它。当我使用_file\u OFFSET\u BITS 64使该实用程序能够识别大文件时,如果需要,复制后的目标文件可以增长到2GB以上。是吗是否可以创建目标文件,使其不会超过2GB?我的意思是在创建该文件后,如果我继续写入该文件,则不应超过2GB。如果您不希望该文件的大小超过2GB,则不要向其写入超过2GB的内容?我期待着在创建过程中通过某些选项了解是否可行文件的创建。是否存在任何限制文件大小的打开/创建标志,然后您应该查看
RLIMIT_FSIZE
并检查它是否适用于您的用例(或者使用限制为31位文件大小的文件系统,如果仍然存在类似情况)。非大文件支持仅用于ABI向后兼容性(
sizeof(off\t)
应保持4),这在64位系统上不是问题,因此无法打开最多2 GiB的文件。谢谢。不幸的是,RLIMIT\u FSIZE不适用于我的情况,。