Syscall 与系统调用包装器,可移植性

问题描述 投票:0回答:1

所以我正在努力解决 syscall() 和可移植性的概念。我听说使用系统调用包装器比仅进行系统调用更便携,但为什么呢?我知道可移植性是指我的代码能够在不同的系统或平台上运行,但我不明白为什么系统调用包装器比 syscall() 更可移植?

linux system-calls portability
1个回答
0
投票

并非每个架构都有每个系统调用。例如,RISC-V 没有

rmdir
。如果您使用包装函数,那么 libc 将自动为您调用其替换函数(
unlinkat
AT_REMOVEDIR
)。但如果您尝试使用原始系统调用,它就是行不通的。

操作系统之间也存在差异。一个极端的例子是 OpenBSD:出于安全原因,动态链接的程序根本不允许进行原始系统调用。那里唯一起作用的是包装函数。

© www.soinside.com 2019 - 2024. All rights reserved.