在文件util-linux-2.17.2/mount/umount.c
,行#246中,写res = umount (node);
。
但是umount
功能在哪里?我搜索了这么多,但没有找到。
umount 是对 libc 中同名库函数的调用。此函数反过来调用卸载系统调用。库函数如何调用内核以执行特定函数可以通过阅读系统调用的工作原理来了解。此链接可能会在此过程中为您提供帮助 系统调用如何工作?
如果您想知道系统调用 umount 在哪里,请下载最新的内核。转到文件 fs/namespace.c。在那里你会发现
SYSCALL_DEFINE2(umount, char __user *, name, int, flags)
和
SYSCALL_DEFINE1(奥杜蒙特,字符__user*,名称)
定义 umount 和 oldumount 函数。
umount
函数是 libc 系统库的一部分。您可以使用例如 objdump -T /lib/libc.so.6 | grep umount
.其中一个输出列中的.text
条目将指示该函数(及其同级umount2
)在该库中定义为可执行代码的符号(而不是全局变量)。
该函数用于执行内核系统调用,通常通过一小段汇编代码。与大多数系统调用相反,glibc 并不简单地将此系统调用包含在其 linux 系统调用的主列表中。相反,它为此提供了一些专用的汇编代码。这其中的含义隐藏在多层宏扩展的背后,刚才我无法让预处理发出最终的汇编代码。