c - Linux 中的 unistd_64.h
问题描述
目前,我在 x86 上使用 linux 内核 v5.8。
在我的 ubuntu 机器上,/usr/include/x86_64-linux-gnu/asm/unistd_64.h
与/usr/src/linux-headers-5.8.0-50-generic/arch/x86/include/generated/uapi/asm/unistd_64.h
.
因此,我看不到新的系统调用,例如openat2
从 linux v5.6 中添加的/usr/include/x86_64-linux-gnu/asm/unistd_64.h
(当然,我可以看到这样的系统调用/usr/src/linux-headers-5.8.0-50-generic/arch/x86/include/generated/uapi/asm/unistd_64.h
。)
我认为这/usr/include/x86_64-linux-gnu/asm/unistd_64.h
与/usr/src/linux-headers-5.4.0-73-generic/arch/x86/include/generated/uapi/asm/unistd_64.h
我使用的以前的内核版本相同。
为什么/usr/include/x86_64-linux-gnu/asm/unistd_64.h
没有更新?
解决方案
内核提供的系统调用不必与 C 库知道的系统调用匹配。于 2020 年 4 月通过提交openat2
添加到:glibc
e788bea
更新 Linux 5.6 的系统调用列表。
Linux 5.6 有新的 openat2 和 pidfd_getfd 系统调用。此补丁将它们添加到 syscall-names.list 并重新生成 arch-syscall.h 文件。
下一个glibc
版本是2.32
2020 年 8 月。在 Ubuntu 中,libc6
带有版本的软件包>=2.32
目前仅适用于groovy
和hirsute
:
软件包 libc6
- 仿生更新(库):GNU C 库:共享库
2.27-3ubuntu1.4:amd64 arm64 armhf i386 ppc64el s390x
也由:libc6-udeb 提供- 焦点更新(库):GNU C 库:共享库
2.31-0ubuntu9.2:amd64 arm64 armhf i386 ppc64el s390x
也由:libc6-udeb 提供- groovy (20.10) (libs): GNU C Library: Shared libraries
2.32 -0ubuntu3: amd64 arm64 armhf i386 ppc64el s390x
也由 libc6-udeb 提供- 多毛(21.04)(库):GNU C库:共享库
2.33 -0ubuntu5:amd64 arm64 armhf i386 ppc64el s390x
glibc>=2.32
但是,由于要求和无论如何都不会获得太多的可移植性linux-kernel>=5.6
,因此您可以在代码中定义系统调用号 ( ifndef
) 并syscall(2)
改为使用。
推荐阅读
- mysql - 如何在 Airflow UI 中检查连接是否有效?
- amazon-cognito - Amazon Cognito SSO - 一旦注销其中一个应用程序,如何从所有应用程序中注销
- c# - C# Asyncronous Sockets Listener BeginReceive 回调不会一直被触发
- mxgraph - 在多个 mxWindows 中创建顶点
- python - 关于 mobSF 的 PDF 报告问题
- android - Android数据绑定从onClick传递不同的视图
- microsoft-edge - 使用 Edge Dev 浏览器在 Microsoft Teams 中呈现 Office 文档问题
- javascript - Cheerio:无法找到一些嵌套元素
- yii2 - yii2 不加载视图 yii\web\HttpException:404
- python-3.x - 添加新数据时列表框自行调整大小