在文件util-linux-2.17.2/mount/umount.c
,line #246中,它写为res = umount (node);
。
但是umount
函数位于何处?我搜索了这么多,但没找到。
答案 0 :(得分:1)
umount
函数是libc系统库的一部分。您可以使用例如objdump -T /lib/libc.so.6 | grep umount
。其中一个输出列中的.text
条目将指示该函数(及其兄弟umount2
)在该库中定义,作为可执行代码的符号(与全局变量相对)。
该函数用于执行内核系统调用,通常通过一小段汇编代码。与大多数系统调用相反,glibc不仅仅在其master list of linux syscalls中包含此系统调用。相反,它有一些dedicated assembly code。这意味着隐藏在宏扩展的许多层之后,我现在无法让预处理器发出最终的汇编代码。
答案 1 :(得分:1)
umount是对libc中同名库函数的调用。该函数依次调用umount系统调用。通过阅读系统调用的工作原理,可以找到库函数如何调用内核来执行特定函数。此链接可能会帮助您完成How do system calls work?
过程如果您想知道系统调用umount的位置,请下载最新的内核。转到文件fs / namespace.c。在那里你会找到
SYSCALL_DEFINE2(umount,char __user *,name,int,flags)
和
SYSCALL_DEFINE1(oldumount,char __user *,name)
定义umount和oldumount函数。