Избыточные системные вызовы ядра Linux - PullRequest
5 голосов
/ 05 ноября 2008

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

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

Ответы [ 2 ]

11 голосов
/ 05 ноября 2008

История: -)

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

6 голосов
/ 05 ноября 2008

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

  • chmod принимает имя файла, а fchmod - дескриптор файла. То же самое для статистики против fstat.
  • fchmodat принимает пару дескриптор файла / имя файла (дескриптор файла для каталога и имя файла для имени файла в каталоге). То же самое для других * при звонках; см. примечания в разделе http://kerneltrap.org/man/linux/man2/openat.2 для объяснения.
...