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