gpt4 book ai didi

c - 为什么要明确调用 stat64 ?

转载 作者:行者123 更新时间:2023-12-03 09:56:05 25 4
gpt4 key购买 nike

关闭。这个问题需要details or clarity .它目前不接受答案。












想改进这个问题?通过 editing this post 添加详细信息并澄清问题.

2年前关闭。




Improve this question




环境:Ubuntu 18.04,Linux 内核 5.3

我正在使用 gdb 调试一些二进制文件.这是我在捕获 stat 时发现的系统调用:

(gdb) bt
#0 0x00007f2d8ecae775 in __GI___xstat (vers=vers@entry=1, name=name@entry=0x7f2d882d7d60 "/etc/app/cfg", buf=buf@entry=0x7f2d8f3a14f0) at ../sysdeps/unix/sysv/linux/wordsize-64/xstat.c:35
#1 0x00007f2d592294e4 in stat64 (__statbuf=0x7f2d8f3a14f0, __path=0x7f2d882d7d60 "/etc/app/cfg") at /usr/include/x86_64-linux-gnu/sys/stat.h:500
#2 0x00007f2d6fac1990 in ?? ()
#3 0x00007f2d8f3a15c8 in ?? ()
#4 0x00007f2d8f3a1620 in ?? ()
#5 0x00007f2d6fabbcb3 in ?? ()
#6 0x00000007170a2ae8 in ?? ()
#7 0x00007f2d8f3a15d0 in ?? ()
#8 0x0000000000000000 in ?? ()

#1 0x00007f2d592294e4 in stat64 (__statbuf=0x7f2d8f3a14f0, __path=0x7f2d882d7d60 "/etc/app/cfg") at /usr/include/x86_64-linux-gnu/sys/stat.h:500让我很困惑。

我不知道 为什么要使用 stat64明确 .首先它需要 _GNU_SOURCE被定义为。其次,据我所知 glibc 的 stat已经处理了所有内核特定的 32/ 64位差人员。

此外, statstat64使用相同的 stat我的内核上的系统调用。

最佳答案

最可能的解释是程序做了 #define _FILE_OFFSET_BITS 64在包括任何系统 header 之前。这会导致调用普通 stat重新映射到 stat64 , openopen64等。现在所有的应用程序都应该这样做。

但是,使用 stat64 是有原因的。等直接。在一个公共(public)接口(interface)逻辑上应该涉及 off_t 的库中或通过定义 _FILE_OFFSET_BITS 更改的任何其他类型,您不能在接口(interface)标题中使用该定义或任何这些类型,因为那样您自己的 ABI 将取决于该宏的设置,该宏由库用户控制,而不是您。相反,您必须定义 _LARGEFILE64_SOURCE并在接口(interface)标题中使用显式大小的类型( off64_t 等)和函数( stat64 等)。原则上,不暴露给外部宏定义的 .c 和 .h 文件仍然可以使用 _FILE_OFFSET_BITS和普通函数,但在实践中更容易强制执行所有库的代码必须仅使用显式大小的类型和函数的样式规则。

关于c - 为什么要明确调用 stat64 ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61448470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com