2013-05-21 2 views
4

Я обезжиренное через Linux Kernel Module Programming руководства, но не могу понять:Какое ядро ​​Функциональный модуль вызывается, когда я говорю «кошка MyFile>/DEV/SDA»

Когда я говорю cat image.iso > /dev/sda, будет ли причиной функция write от file_operations structure, которую должен выполнить драйвер устройства sda? Или интерфейс файлов не применяется к узлам блоков устройств?

Где я могу найти реализацию этой функции? (соответствующий драйвер в пределах Linux code tree)?

+3

Вы можете видеть, что система вызывает использование команды с помощью утилиты 'strace'. Например. 'strace cat image.iso>/dev/sda'. Это то, что вам нужно? – lgeorget

+7

@lgeorget jftr вы не видите всю информацию, потому что перенаправление происходит до того, как называется strace, поэтому, вероятно, это должно быть что-то вроде 'strace -f sh -c 'cat image.iso>/dev/sda'' –

+0

ups да, спасибо за исправление этого – lgeorget

ответ

0

fs/block-dev.c определяет операции с файлами и операции с адресным пространством применительно к блочным устройствам.

static const struct address_space_operations def_blk_aops = { 
    .readpage  = blkdev_readpage, 
    .writepage  = blkdev_writepage, 
    .write_begin = blkdev_write_begin, 
    .write_end  = blkdev_write_end, 
    .writepages  = generic_writepages, 
    .releasepage = blkdev_releasepage, 
    .direct_IO  = blkdev_direct_IO, 
    .is_dirty_writeback = buffer_check_dirty_writeback, 
}; 

const struct file_operations def_blk_fops = { 
    .open   = blkdev_open, 
    .release  = blkdev_close, 
    .llseek   = block_llseek, 
    .read   = do_sync_read, 
    .write   = do_sync_write, 
    .aio_read  = blkdev_aio_read, 
    .aio_write  = blkdev_aio_write, 
    .mmap   = generic_file_mmap, 
    .fsync   = blkdev_fsync, 
    .unlocked_ioctl = block_ioctl, 
#ifdef CONFIG_COMPAT 
    .compat_ioctl = compat_blkdev_ioctl, 
#endif 
    .splice_read = generic_file_splice_read, 
    .splice_write = generic_file_splice_write, 
}; 

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

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