В файле util-linux-2.17.2/mount/umount.c
, line #246, написано res = umount (node);
.Где находится системный вызов umount?
Но где находится функция umount
? Я так много искал, но не нашел.
В файле util-linux-2.17.2/mount/umount.c
, line #246, написано res = umount (node);
.Где находится системный вызов umount?
Но где находится функция umount
? Я так много искал, но не нашел.
umount - это вызов функции библиотеки с тем же именем в libc. Эта функция, в свою очередь, вызывает вызов системного вызова umount. Как функция библиотеки выполняет вызов ядру для выполнения определенной функции, можно узнать, прочитав о том, как работают системные вызовы. Эта ссылка может помочь вам в этом процессе. How do system calls work?
Если вы хотите узнать, где находится системный вызов umount, загрузите последнее ядро. Перейдите в файл fs/namespace.c. Там вы найдете
SYSCALL_DEFINE2 (размонтировать, символ __user *, имя, внутр, флаги)
и
SYSCALL_DEFINE1 (oldumount, символ __user *, имя)
, которые определяют функции umount и oldumount.
umount
Функция является частью вашей библиотеки библиотеки libc. Вы можете найти так много, используя, например, objdump -T /lib/libc.so.6 | grep umount
. В записи .text
в одном из столбцов вывода указывается, что эта функция (и ее дочерний элемент umount2
) определены в этой библиотеке как символы для исполняемого кода (в отличие от глобальных переменных).
Эта функция реализована для выполнения системного вызова ядра, обычно с помощью небольшого фрагмента кода сборки. В отличие от большинства системных вызовов, glibc не просто включает этот syscall в свой master list of linux syscalls. Вместо этого на нем есть dedicated assembly code. Смысл этого скрыт за многими слоями макрорасширения, и я не могу заставить препроцессор испускать окончательный код сборки только сейчас.
Я думаю, что umount() заштрихован как системный стол. Кажется, что заголовки это указывают. Вот что я могу найти помимо этого: http://koala.cs.pub.ro/lxr/glibc/sysdeps/unix/sysv/linux/umount.S –