linux-kernel - linux系统调用实现

标签 linux-kernel system-calls

我在哪里可以找到一些系统调用的源代码?例如,我正在寻找 fstat 的实现,如 here 所述。 .

最佳答案

A system call主要在 Linux kernel 内部实现, 在 C standard library 中有一个小胶水代码.但另见 vdso(7) .

从用户态的角度来看,一个系统调用(它们列在syscalls(2) ...)是一个带有一些calling conventions的机器指令(通常是SYSENTER) (例如,定义哪个机器寄存器保存系统调用号——例如 /usr/include/asm/unistd_64.h....- 中的 __NR_stat,以及哪些其他寄存器包含系统调用的参数)。

使用strace(1)了解给定程序或进程完成了哪些系统调用。

C 标准库有一个微型包装函数(调用内核,在 ABI 之后,处理错误报告 & errno)。

对于 stat(2) ,C 包装函数是例如在 stat/stat.c对于 musl-libc .

kernel里面代码,大部分工作发生在 fs/stat.c 中(例如,在第 207 行之后)。

另见 this & that答案

关于linux-kernel - linux系统调用实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35394164/

相关文章:

operating-system - 一个简单的 SYSENTER/SYSCALL 问题

c - 内核 Makefile 不会为我的模块创建任何 .ko 文件

linux - Linux IRQ 处理程序中固有的竞争条件

android - Android NDK 中的系统调用

Linux x86 系统调用 355 在启动时重复运行并导致崩溃,除非返回 -ENOSYS

c - 为什么将数据写入以 O_APPEND 标志打开的文件,总是写在末尾,即使是 `lseek` ?

linux - 是否有 Linux 系统调用可以让我在另一个进程的上下文中进行系统调用?

将静态内核驱动程序编译为模块

c - 访问内核 2.6+ 中的 sys_call_table

C 堆栈管理器项目 : file I/O with syscalls problems