为什么 linux 系统调用在不同架构之间不同
Why are linux system calls different across architectures
根据此 system calls table,linux 系统调用在不同的体系结构中是不同的,但 IMO 系统调用是更高级别的封装,不依赖于任何特定的体系结构。为什么要这样设计?
在特定情况下,riscv64 linux 没有 mkdir
,而是 mkdirat
,但奇怪的是它没有 rmdir
或 rmdirat
,它如何在没有 rmdir
的情况下实现 /bin/rmdir
,即使它可以(通过 read
和 write
等其他系统调用),为什么不对 mkdir
?这两个系统调用不匹配真是令人困惑。
你看错了方向。 mkdirat
可以做 mkdir
可以做的所有事情,然后还有一些,所以问题不是为什么 riscv64 没有 有 mkdir
,而是为什么 x86 有它。答案是向后用户空间兼容性。由于 Linux 永远不会打破这一点,而 mkdir
首先存在,它将永远存在。但是 riscv64 从来没有它,所以没有用户空间程序可以让它因为没有它而中断。
至于 rmdir
,替代它的不是 rmdirat
,而是 unlinkat
和 AT_REMOVEDIR
。同样的论点也适用于它。
根据此 system calls table,linux 系统调用在不同的体系结构中是不同的,但 IMO 系统调用是更高级别的封装,不依赖于任何特定的体系结构。为什么要这样设计?
在特定情况下,riscv64 linux 没有 mkdir
,而是 mkdirat
,但奇怪的是它没有 rmdir
或 rmdirat
,它如何在没有 rmdir
的情况下实现 /bin/rmdir
,即使它可以(通过 read
和 write
等其他系统调用),为什么不对 mkdir
?这两个系统调用不匹配真是令人困惑。
你看错了方向。 mkdirat
可以做 mkdir
可以做的所有事情,然后还有一些,所以问题不是为什么 riscv64 没有 有 mkdir
,而是为什么 x86 有它。答案是向后用户空间兼容性。由于 Linux 永远不会打破这一点,而 mkdir
首先存在,它将永远存在。但是 riscv64 从来没有它,所以没有用户空间程序可以让它因为没有它而中断。
至于 rmdir
,替代它的不是 rmdirat
,而是 unlinkat
和 AT_REMOVEDIR
。同样的论点也适用于它。