2014-12-02 2 views
0

Я ищу написать модуль ядра, который может перехватывать и блокировать операции, которые стремятся изменить биты для неизменяемых и добавленных только флагов в файлах. Это, предположительно, fcntl(), но я не видел параметров для имени файла/папки или новых бит флага. Я что-то не понимаю?Что такое системный вызов Linux для изменения флагов файлов?

+0

http://unixhelp.ed.ac.uk/CGI/man-cgi?fchmodat+2 – filmor

+0

Этот вопрос относится к unix.stackexchange.com – KevinDTimm

+0

@KevinDTimm Нет, это не так. Это вопрос программирования, он по теме здесь, и он отключен от темы на [unix.se], который предназначен только для пользователей и администраторов. – Gilles

ответ

0

fcntl() предназначен для изменения атрибутов открытых файловых дескрипторов. Вероятно, вы ищете системные вызовы chmod (или fchmod или fchmodat), как определено в fs/open.c.

+0

Nope. Я ищу системный вызов. – Melab

+0

Это * это * syscall. Добавлена ​​ссылка на реализацию внутри ядра Linux. – Sven

+0

Спасибо. Это намного яснее. – Melab

0

блок операций, которые стремятся изменить биты для неизменны и присоединять-только флаги на файлах

С конкатенирующего только флаг может быть только флаг состояния файла O_APPEND, системный вызов, который должен быть перехвачены для этого есть, как вы предполагалось, fcntl() - см fcntl(2) Linux manual page:

 
File status flags 
    Each open file description has certain associated status flags, 
    initialized by open(2) and possibly modified by fcntl(). Duplicated 
    file descriptors (made with dup(2), fcntl(F_DUPFD), fork(2), etc.) 
    refer to the same open file description, and thus share the same file 
    status flags. 

    The file status flags and their semantics are described in open(2). 

    F_GETFL(void) 
      Return (as the function result) the file access mode and the 
      file status flags; arg is ignored. 

    F_SETFL(int) 
      Set the file status flags to the value specified by arg. File 
      access mode (O_RDONLY, O_WRONLY, O_RDWR) and file creation 
      flags (i.e., O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC) in arg are 
      ignored. On Linux, this command can change only the O_APPEND, 
      O_ASYNC, O_DIRECT, O_NOATIME, and O_NONBLOCKflags. It is not 
      possible to change the O_DSYNCand O_SYNCflags; see BUGS, 
      below. 

Однако обратите внимание, что режим доступа O_RDONLY не может быть изменен с помощью fcntl().

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