2008-11-04 6 views
4

В настоящее время я работаю над проектом, который подключается к различным системным вызовам и записывает вещи в журнал, в зависимости от того, какой из них был вызван. Так, например, когда я изменяю права доступа к файлу, я пишу небольшую запись в файл журнала, который отслеживает старое разрешение и новое разрешение. Тем не менее, у меня возникают проблемы с тем, где я должен смотреть. В приведенном выше примере strace сообщает мне, что команда «chmod» использует системный вызов sys_fchmodat(). Тем не менее, есть также sys_chmod() и sys_fchmod().Redundant Linux Kernel System Calls

Я уверен, что разработчики ядра знают, что они делают, но мне интересно: в чем смысл всех этих (по-видимому) избыточных системных вызовов и существует ли какое-либо правило, по которому они используются для чего? (Т.е. являются «на» системные вызовы или те, с префиксом «F» означает делать что-то конкретное?)

ответ

6

Да, есть некоторые правила именования.

  • chmod принимает имя файла, в то время как fchmod принимает файловый дескриптор. То же самое для stat vs fstat.
  • fchmodat принимает файловую дескриптор/имя файла (дескриптор файла для каталога и имени файла для имени файла в каталоге). То же самое для других * при звонках; см. раздел ПРИМЕЧАНИЯ http://kerneltrap.org/man/linux/man2/openat.2 для пояснения.
11

История :-)

После системного вызова была создана она никогда не может быть изменен, поэтому когда требуется новая функциональность, создается новый системный вызов. (Конечно, это означает, что перед созданием нового системного вызова есть очень высокий бар).

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

  • Нет связанных вопросов^_^