Где системный вызов umount?

В файле util-linux-2.17.2/mount/umount.c строка #246 написано res = umount (node);.

Но где находится функция umount? Я столько искал, но не нашел.


person Dor    schedule 01.10.2013    source источник
comment
Я думаю, что umount() заглушен как системный вызов. Заголовки, кажется, указывают на это. Вот что я могу найти помимо этого: koala .cs.pub.ro/lxr/glibc/sysdeps/unix/sysv/linux/umount.S   -  person Peter L.    schedule 02.10.2013


Ответы (2)


umount — это вызов одноименной библиотечной функции в libc. Эта функция, в свою очередь, вызывает системный вызов umount. Как библиотечная функция обращается к ядру для выполнения конкретной функции, можно узнать, прочитав о том, как работают системные вызовы. Эта ссылка может помочь вам в процессе Как работают системные вызовы?

Если вы хотите знать, где присутствует системный вызов umount, скачайте последнюю версию ядра. Перейдите к файлу fs/namespace.c. Там вы найдете

SYSCALL_DEFINE2 (размонтировать, char __user *, имя, целое число, флаги)

а также

SYSCALL_DEFINE1 (oldumount, char __user *, имя)

которые определяют функции umount и oldumount.

person Vivek S    schedule 03.10.2013

umount функция является частью вашей системной библиотеки libc. Вы можете найти столько же, используя, например. objdump -T /lib/libc.so.6 | grep umount. Запись .text в одном из выходных столбцов будет указывать на то, что эта функция (и ее сестра umount2) определены в этой библиотеке как символы для исполняемого кода (в отличие от глобальных переменных).

Эта функция реализована для выполнения системного вызова ядра, обычно с помощью небольшого фрагмента ассемблерного кода. В отличие от большинства системных вызовов, glibc не просто включает этот системный вызов в свой основной список системных вызовов Linux. Вместо этого у него есть некоторые специальный ассемблерный код для этого. Смысл этого скрыт за многими слоями расширения макросов, и я не могу заставить препроцессор выдать окончательный код сборки прямо сейчас.

person MvG    schedule 02.10.2013