linux - Linux中的系统调用和文件操作

标签 linux system-calls

我正在阅读有关设备驱动程序的文章,我有一个与 UNIX 哲学有关的问题,即一切皆文件。

当用户发出一个命令,比如打开一个文件时,什么会起作用——系统调用还是文件操作? sys_open 是系统调用,open 是文件操作。您能否详细说明一下这个主题。

提前致谢。

最佳答案

快速回答,希望对您有所帮助:

所有系统调用的工作方式相同。系统调用号与系统调用参数一起存储在某个地方(例如在寄存器中)。在打开系统调用的情况下,参数是:指向文件名和权限字符串的指针。然后 open 函数使用适当的指令(syscallint ...,这取决于硬件)引发软件中断。

至于任何中断,调用内核(在内核模式下)来处理中断。系统检测到中断是由系统调用引起的,然后读取寄存器中的系统调用号,判断是open系统调用,在内核内存中创建文件描述符,然后调用驱动程序open真正打开文件功能。然后将文件描述符 id 存储回寄存器并返回到用户模式。

然后从寄存器中检索文件描述符并由 open() 返回。

关于linux - Linux中的系统调用和文件操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12895971/

相关文章:

linux - syscall如何知道要跳转到哪里?

c - 内部操作系统

c# - 如何知道 Process.Start() 创建的进程何时关闭?

php - 如何在CentOs中安装php-xml

linux - 通过 SSH 仅 Gzip 包含 "*foo*"的文件

mysql - 如何干净地停止Mysql恢复过程

linux - 为什么 ptrace 显示 32 位 execve 系统调用具有 EAX = 59,即 64 位调用号? 32 位系统调用如何在 x86-64 上工作?

c - 如何捕获读写系统调用?

linux - 什么系统调用用于在 Linux 中复制文件

linux - 如何查看标签的年龄?