файловые операции EXT3

Я пытаюсь понять, как Linux работает с файлами EXT3. Я смотрю на fs/ext3/file.c, где присутствуют файловые операции, которые имеют дело с файлами:

const struct file_operations ext3_file_operations = {
    .llseek         = generic_file_llseek,
    .read           = do_sync_read,
    .write          = do_sync_write,
    .aio_read       = generic_file_aio_read,
    .aio_write      = generic_file_aio_write,
    .unlocked_ioctl = ext3_ioctl,
#ifdef CONFIG_COMPAT
    .compat_ioctl   = ext3_compat_ioctl,
#endif
    .mmap           = generic_file_mmap,
    .open           = dquot_file_open,
    .release        = ext3_release_file,
    .fsync          = ext3_sync_file,
    .splice_read    = generic_file_splice_read,
    .splice_write   = generic_file_splice_write,
};

Как я могу узнать, когда .open заменяется, например, функцией «dquot_file_open»? Должен ли я следовать системному вызову, определенному в fs/open.c:

SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode)

Или я должен смотреть на другие функции?

Я работаю над Linux 3.7.6 для User-Mode-Linux.


person hkassir72    schedule 08.05.2013    source источник


Ответы (1)


Ядро Linux организовано в стиле ООП (хотя и написано на C). struct file_operations на самом деле является классом, члены (указатели функций) являются функциональными членами ("методами" для заголовков Java) класса. Код, который вы цитируете, служит для настройки объекта ext3 путем заполнения указателей функций. Это делается во время компиляции/компоновки.

Системный вызов open(2) вызывает это косвенно, обнаруживая struct file_operations, относящуюся к имеющейся файловой системе, и вызывая ее член open.

Я бы посоветовал вам заглянуть на страницу kernelnewbies, чтобы получить общее представление и более подробную справку.

person vonbrand    schedule 08.05.2013
comment
Да, я знаю эту информацию. Мой вопрос: где функция открытия взаимодействует с файловыми_операциями EXT3? - person hkassir72; 08.05.2013