2013-05-08 8 views
1

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

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

ответ

2

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

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

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

+0

Да, я знаю эту информацию. Мой вопрос в том, где открытая функция взаимодействует с «file_operations» EXT3? – user19570