2013-10-01 5 views
1

В файле util-linux-2.17.2/mount/umount.c, line #246, написано res = umount (node);.Где находится системный вызов umount?

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

+0

Я думаю, что umount() заштрихован как системный стол. Кажется, что заголовки это указывают. Вот что я могу найти помимо этого: http://koala.cs.pub.ro/lxr/glibc/sysdeps/unix/sysv/linux/umount.S –

ответ

1

umount - это вызов функции библиотеки с тем же именем в libc. Эта функция, в свою очередь, вызывает вызов системного вызова umount. Как функция библиотеки выполняет вызов ядру для выполнения определенной функции, можно узнать, прочитав о том, как работают системные вызовы. Эта ссылка может помочь вам в этом процессе. How do system calls work?

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

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

и

SYSCALL_DEFINE1 (oldumount, символ __user *, имя)

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

1

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

Эта функция реализована для выполнения системного вызова ядра, обычно с помощью небольшого фрагмента кода сборки. В отличие от большинства системных вызовов, glibc не просто включает этот syscall в свой master list of linux syscalls. Вместо этого на нем есть dedicated assembly code. Смысл этого скрыт за многими слоями макрорасширения, и я не могу заставить препроцессор испускать окончательный код сборки только сейчас.

Смежные вопросы