为什么 linux 系统调用在不同架构之间不同

Why are linux system calls different across architectures

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

在特定情况下,riscv64 linux 没有 mkdir,而是 mkdirat,但奇怪的是它没有 rmdirrmdirat,它如何在没有 rmdir 的情况下实现 /bin/rmdir,即使它可以(通过 readwrite 等其他系统调用),为什么不对 mkdir?这两个系统调用不匹配真是令人困惑。

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

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