В файле 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. Эта функция, в свою очередь, вызывает системный вызов umount. Как библиотечная функция обращается к ядру для выполнения конкретной функции, можно узнать, прочитав о том, как работают системные вызовы. Эта ссылка может помочь вам в процессе Как работают системные вызовы?
Если вы хотите знать, где присутствует системный вызов umount, скачайте последнюю версию ядра. Перейдите к файлу fs/namespace.c. Там вы найдете
SYSCALL_DEFINE2 (размонтировать, char __user *, имя, целое число, флаги)
а также
SYSCALL_DEFINE1 (oldumount, char __user *, имя)
которые определяют функции umount и oldumount.
umount
функция является частью вашей системной библиотеки libc. Вы можете найти столько же, используя, например. objdump -T /lib/libc.so.6 | grep umount
. Запись .text
в одном из выходных столбцов будет указывать на то, что эта функция (и ее сестра umount2
) определены в этой библиотеке как символы для исполняемого кода (в отличие от глобальных переменных).
Эта функция реализована для выполнения системного вызова ядра, обычно с помощью небольшого фрагмента ассемблерного кода. В отличие от большинства системных вызовов, glibc не просто включает этот системный вызов в свой основной список системных вызовов Linux. Вместо этого у него есть некоторые специальный ассемблерный код для этого. Смысл этого скрыт за многими слоями расширения макросов, и я не могу заставить препроцессор выдать окончательный код сборки прямо сейчас.