小型文件系统bfs分析(2)---支持的操作
来源:互联网 发布:英国博尔顿大学 知乎 编辑:程序博客网 时间:2024/04/30 15:15
支持的操作
通过浏览bfs_iget函数的如下代码,确定bfs只支持普通文件和目录两种文件类型。
if (le32_to_cpu(di->i_vtype) == BFS_VDIR) { inode->i_mode |= S_IFDIR; inode->i_op = &bfs_dir_inops; inode->i_fop = &bfs_dir_operations; } else if (le32_to_cpu(di->i_vtype) == BFS_VREG) { inode->i_mode |= S_IFREG; inode->i_op = &bfs_file_inops; inode->i_fop = &bfs_file_operations; inode->i_mapping->a_ops = &bfs_aops; }
普通文件
inode_operations
const struct inode_operations bfs_file_inops;
普通文件的inode_operations没有任何初始化,仅仅是定义了bfs_file_inops。对比minix fs
const struct inode_operations minix_file_inode_operations = { .truncate = minix_truncate, .getattr = minix_getattr,};
bfs无法对文件进行截断操作,以及获取文件的属性。实际发现可以进行截断操作,后续再看。
file_operations
const struct file_operations bfs_file_operations = { .llseek = generic_file_llseek, .read = do_sync_read, .aio_read = generic_file_aio_read, .write = do_sync_write, .aio_write = generic_file_aio_write, .mmap = generic_file_mmap, .splice_read = generic_file_splice_read,};
这部分和minix fs完全一样,全都使用kernel的标准函数
address_space_operations
const struct address_space_operations bfs_aops = { .readpage = bfs_readpage, .writepage = bfs_writepage, .sync_page = block_sync_page, .write_begin = bfs_write_begin, .write_end = generic_write_end, .bmap = bfs_bmap,};
这部分和minix fs也差不多,实际上都是调用标准函数,只是给这些标准函数传递了bfs_get_block而已。
目录
inode_operations
const struct inode_operations bfs_dir_inops = { .create = bfs_create, .lookup = bfs_lookup, .link = bfs_link, .unlink = bfs_unlink, .rename = bfs_rename,};
可以看出bfs支持:
- 创建文件
- 路径查询
- 硬链接
- 删除文件
- 文件重命名
对比minix fs
const struct inode_operations minix_dir_inode_operations = { .create = minix_create, .lookup = minix_lookup, .link = minix_link, .unlink = minix_unlink, .symlink = minix_symlink, .mkdir = minix_mkdir, .rmdir = minix_rmdir, .mknod = minix_mknod, .rename = minix_rename, .getattr = minix_getattr,};
发现bfs不能进行如下操作:
- 创建符号链接
- 创建目录
- 删除目录
- 创建设备节点
- 获取目录属性
实际上可以获取目录属性,之后再看。
file_operations
const struct file_operations bfs_dir_operations = { .read = generic_read_dir, .readdir = bfs_readdir, .fsync = file_fsync, .llseek = generic_file_llseek,};
和minix fs对比
const struct file_operations minix_dir_operations = { .read = generic_read_dir, .readdir = minix_readdir, .fsync = minix_sync_file,};
minix fs没有实现目录的llseek,这个操作目前还不清楚用途。
0 0
- 小型文件系统bfs分析(2)---支持的操作
- 小型文件系统bfs分析(1)---layout分析
- 小型文件系统bfs分析(0)---前期准备
- 我做的小型文件系统(TC版)
- uefi-ntfs文件系统支持的原理分析
- LINUX支持的文件系统
- 小型数据库sqlite3的一些实用操作
- 一个支持8~16人的小型网络游戏的编写
- 操作文件系统(2)二进制文件的建、写、读
- Pyos 支持的 FAT12 文件系统~~~~
- FDisk支持的文件系统类型
- 大二的时候的一个小项目---实现四则运算的逻辑分析实现(小型编译器)
- J2ME文件系统的操作(JSR75)
- [疯狂Java]NIO.2:平台无关的文件系统访问支持(Path、Paths、Files)
- 文件系统的操作命令
- J2ME的文件系统操作
- 文件系统的操作代码
- Hadoop文件系统的操作
- Serializable与Parcelable传递对象详解(activity间传递对象方式)
- Codeforces 3A Shortest path of the king(BFS???NO!!)
- 【Android基础知识】选项菜单、上下文菜单、子菜单的使用
- ORACLE口令文件验证与操作系统验证
- C# 特性
- 小型文件系统bfs分析(2)---支持的操作
- SAP SMP SDK 3.0 SP9支持Android OS 什么版本
- Jquery-1实现简单的复选框删除增加操作
- 走对路!在智能时代别捡了芝麻丢了西瓜!
- 北航面试之计算机从按下电源键到出现桌面是怎样的过程(linux)
- Linux程序设计——线程
- 获取当前viewcontroller响应事件传递
- 一步一步教你写股票走势图——分时图五(自定义标记)
- assigned , native , identity 区别-Field 'id' doesn't have a default value问题解决方法