在 POSIX 中,
系统调用是否经常在 shell 中运行但并不总是有命令或实用程序?
对于哪些类型的系统调用在 shell 中具有相应的命令或实用程序,以及 shell 中的哪些类型的命令或实用程序具有相应的系统调用,是否有一些经验法则?
对于系统调用和相应的 shell 命令或实用程序,该命令或实用程序是否始终以与系统调用相同的方式实现?实现是基于系统调用吗?
答案1
- 系统调用是否经常在 shell 中运行但并不总是有命令或实用程序?
有时。通常会公开对公开有用的系统调用。无法更改目录的 shell 不会是一个非常有用的 shell。其中一些(例如chdir
)被实现为 shell 内置函数,因为它们只能影响调用它们的进程。其他的则以小程序的形式实现。还有一些根本没有暴露:有非常没有理由直接从 shell 调用mmap
,所以你不能,除非你自己编写一个包装器(无论如何这都是无用的)。
- 对于哪些类型的系统调用在 shell 中具有相应的命令或实用程序,以及 shell 中的哪些类型的命令或实用程序具有相应的系统调用,是否有一些经验法则?
没有标准的对应关系或经验法则。名称可以是任何名称,例如rm
以系统调用的形式实现unlink
;但是还有一个unlink
命令还这样做,但缺乏大多数命令行选项,基本上只是一个包装器。系统pipe
调用以及相应的read
s 和write
s 通过语法公开|
。
man syscalls
应该给你一个系统调用列表。
- 对于系统调用和相应的 shell 命令或实用程序,该命令或实用程序是否始终以与系统调用相同的方式实现?实现是基于系统调用吗?
这些实用程序仅使用系统调用,事实上,这是实用程序可以执行这些操作的唯一方法。例如,您无法删除文件或更改权限没有无论是直接还是间接地通过系统调用机制。
(想象一下如果不是这种情况会是什么样子。每个想要删除文件的程序都必须实现自己的文件系统驱动程序和硬盘驱动程序。也不会有安全性,因为每个程序都将负责检查相反,您只需使用系统调用,然后内核就会计算出一切。)