【发布时间】:2021-10-28 03:49:06
【问题描述】:
我问这个,因为我得到的系统调用定义非常矛盾。
一方面,我已经看到它们是操作系统提供的用户程序可以调用的 API 的定义。由于此 API 是高级接口,因此必须使用 C 等高级语言实现。
另一方面,我看到实际的操作系统系统调用是机器指令,您必须设置某些寄存器才能调用(根据操作系统设置的某些合规标准)。但这看起来不像 UNIX API,如 open()、write() 和 read(),所以这里发生了什么。
我还读到这些高级接口是在 C 库中实现的,这些库执行实际的汇编代码系统调用。既然如此,我们为什么说操作系统提供了这个接口,而实际上它是由C语言提供的。如果我想在不使用 C 的情况下直接对操作系统执行 UNIX 系统调用怎么办?
【问题讨论】:
-
Linux 是开源的。 gnu 库是开源的。是什么阻止你检查?这很简单,会给你答案。
-
不使用标准 C 库通常是愚蠢的。如果你真的需要避免这样做,你可能也知道该怎么做。
-
What if I want to perform a UNIX syscall directly to the OS without having to use C?你可以。您还可以在汇编程序中编写整个应用程序。但问题是为了什么?为什么?你想达到什么目标?出于教育目的 - 是的,用于现实生活中的编程 - 永远不会 -
是的,我知道我们不应该这样做,我只是想知道底层是怎么做的,操作系统提供的接口到底是什么
-
“由于这个 API 是一个高级接口,它必须用 C 等高级语言来实现。”不,这只是意味着库必须使用其他高级语言可以与之交互的 ABI。通常,操作系统本身是从 C 源代码编译的。
标签: c unix operating-system system system-calls