我正在尝试了解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 for User-Mode-Linux
答案 0 :(得分:2)
Linux内核以OOP方式组织(尽管用C语言编写)。 struct file_operations
实际上是一个类,成员(函数指针)是类的函数成员("方法"对于Java头)。您引用的代码用于通过填写函数指针来设置ext3对象。这是在编译/链接时完成的。
open(2)
系统调用通过查找与手头文件系统相关的struct file_operations
并调用其open
成员来间接调用此方法。
我建议您查看kernelnewbies页面以获取整体视图和更详细的帮助。