为什么 Linux 系统调用在不同架构下会有所不同

Dir*_*tor 3 linux system-calls linux-kernel riscv

根据这个系统调用表,Linux系统调用在不同的体系结构中是不同的,但IMO系统调用是更高级别的封装,不依赖于任何特定的体系结构。为什么要这样设计呢?

在特定情况下,riscv64 linux 没有mkdir,而是有mkdirat,但奇怪的是它没有rmdir或,没有rmdirat,它怎么能实现,即使它可以(通过其他系统调用,如和),为什么不为 做同样的事情呢?这两个系统调用不匹配确实令人困惑。/bin/rmdirrmdirreadwritemkdir

Jos*_*ica 7

你从错误的方向看待这个问题。mkdirat可以做所有能做的事情,然后是一些,所以mkdir问题不是为什么 riscv64没有mkdir,而是为什么 x86它。答案是向后用户空间兼容性。由于 Linux 从未打破这一点,并且mkdir首先存在,因此它将永远存在。但 riscv64 从来没有它,所以没有用户空间程序可以因为没有它而破坏。

至于,其rmdir替代品不是rmdirat,而是。同样的论点也适用于它。unlinkatAT_REMOVEDIR