1

在文件util-linux-2.17.2/mount/umount.c第 #246 行,它被写入res = umount (node);

但是umount函数在哪里?我已经搜索了很多,但没有找到。

4

2 回答 2

1

umount 函数是您的 libc 系统库的一部分。您可以使用 eg 找到尽可能多的内容objdump -T /lib/libc.so.6 | grep umount。输出列之一中的.text条目将指示该函数(及其兄弟umount2)在该库中定义,作为可执行代码的符号(而不是全局变量)。

该函数的实现是为了执行内核系统调用,通常是通过一小段汇编代码。与大多数系统调用相反,glibc 并没有简单地将这个系统调用包含在它的 linux 系统调用的主列表中。相反,它为此提供了一些专用的汇编代码。这其中的意义隐藏在很多层的宏展开之后,我刚才无法让预处理器发出最终的汇编代码。

于 2013-10-02T01:21:58.750 回答
1

umount 是对 libc 中同名库函数的调用。该函数依次调用 umount 系统调用。通过阅读系统调用的工作原理,可以了解库函数如何调用内核以执行特定函数。此链接可能会在此过程中对您有所帮助系统调用如何工作?

如果您想知道系统调用 umount 在哪里,请下载最新的内核。转到文件 fs/namespace.c。在那里你会发现

SYSCALL_DEFINE2(umount, char __user *, name, int, flags)

SYSCALL_DEFINE1(oldumount, char __user *, name)

它定义了 umount 和 oldumount 函数。

于 2013-10-03T17:56:13.923 回答