当前位置:首页 >> 信息与通信 >>

struct file 结构体


struct file 结构体 (转)
(2011-02-17 19:11:25) 转载 标签: 分类: Linux 驱动学习
杂谈

在 file_operations 结构体中,会看到许多函数指针所指向的函数都必须传进 struct file 结构体指针 struct file * 作为参数。struct file 结构体定义 在 &l

t;linux/fs.h> 中,完整如下: 引用 struct struct file { union { struct list_head struct rcu_head fu_list; fu_rcuhead;

} f_u; f_path; struct path #define f_dentry f_path.dentry #define f_vfsmnt f_path.mnt *f_op; const struct file_operations spinlock_t f_lock; atomic_long_t f_count; f_flags; unsigned int fmode_t f_mode; loff_t f_pos; f_owner; struct fown_struct *f_cred; const struct cred f_ra; struct file_ra_state u64 #ifdef CONFIG_SECURITY void #endif void #ifdef CONFIG_EPOLL struct list_head #endif struct address_space #ifdef CONFIG_DEBUG_WRITECOUNT *f_mapping; f_ep_links; f_version; *f_security;

*private_data;

unsigned long f_mnt_write_state; #endif }; 在设备驱动中,struct file 结构体也是一个非常重要的数据结构。注意的是, 这里的 file 和应用程序中的 FILE 流指针没有什么关系,FILE 定义在 C 库 中,它永远不会出现在内核代码中。 file structure 结构代表一个打开的文件(open file).(打开的文件并没有确切 的指定到哪个设备驱动,实际上每个打开的文件都与内核空间中的 struct file 结构相关联)。 file structure 结构在调用 open 打开一个文件时由内核创建,并会被传递给 任一个对这个打开文件进行操作的函数;当所有事情都做完后,会调用 close() 关闭掉文件,此时内核释放这个数据结构。 一般地,在内核源码中,struct file 结构体的指针往往写成 filp 。 中的几个重要成员: struct file 中的几个重要成员 mode_t f_mode; 文件模式根据 FMMODE_READ 和 FMODE_WRITE 位来识别文件是否可读或可写, 或 是可读可写。在 read() 和 write() 系统调用中,没有必要对此权限进行检查, 因为内核已经在你的系统调用之前已经做了检查。 如果文件没有相应的读或写权 限,那么如果尝试读写都将被拒绝,驱动程序甚至对此情况毫无知觉。 loff_t f_pos; 此变量表示当前的文件读写位置。loff_t 在所有的平台上都是 64 位的变量 ( long long 型, gcc 专用术语)。驱动程序如果想知道当前在文件中所处位置, 那么可以通过读取此变量得知,但是一般地不应直接对此进行更改。通过 llseek() 方法可以改变文件位置。 unsigned int f_flags; 这是表示如 O_RDONLY, O_NONBLOCK 与 O_SYNC 这样的标志。一个驱动程序应该 检查 O_NONBLOCK 标志,以查看是否有非阻塞操作的请求。其它的标志用得比较 少。需要注意的是,检查 read/write 权限应该是通过检查 f_mode 得到而不是 f_flags 。所有的标志定义在头文件 linux/fcntl.h 中可以看到。 struct file_operations *f_op; 内核安排这个指针作为它的 open 实现的一部分,当需要分派什么操作时,会读 取它。filp->f_op 因为不会被内核保存起来以在其后之用,所以我们可以改变 我们对相关文件的操作,在对文件使用新的操作方法时,我们就会转移到相应调 用上。

void *private_data; 在对驱动调用 open 方法之前,open() 系统调用会这个指针设置为 NULL 。用 户可以自由使用这个域,或者对其忽略。可以使用这个域之想分配的数据空间, 但必须记得在内核销毁 file structure 之前在 release 方法里释放掉原来分 配的内存。private_data 对于系统调用之间信息的保存会显得非常有用。 struct dentry *f_dentry; 目录入口 (dentry) 结构与文件相关。一般的,除了在以 filp->f_dentry->d_inode 来访问 inode 结构时,我们不太关心 dentry 这个 结构。


相关文章:
struct file 结构体
struct file 结构体_信息与通信_工程科技_专业资料。linux的驱动相关的入门级的简介struct file 结构体 (转) (2011-02-17 19:11:25) 转载 标签: 分类: Linux...
file_operations结构体详细分析
在文件结构被释放时引用这个操作. 如同 open, release 可以为 NULL. int(*synch)(struct file *,struct dentry *,int datasync); 刷新待处理的数据,允许进程...
struct inode 和 struct file
struct inode 和 struct file_IT/计算机_专业资料。struct inode 和 struct file 1、struct inode──字符设备驱动相关的重要结构介绍 结构表示具体的文件, 结构表示...
file_operations结构体详细分析
在文件结构被释放时引用这个操作. 如同 open, release 可以为 NULL. int(*synch)(struct file *,struct dentry *,int datasync); 刷新待处理的数据,允许进程...
c语言_文件操作_FILE结构体解释_涉及对操作系统文件FCB操作的解释
可以在 stdio.h(位于 visual studio 安装目录下的 include 文件夹下)头文件中查看 FILE 结构体的定义,如下: TC2.0 中: typedef struct { short unsigned char...
文件结构全面解释
文件结构全面解释_计算机软件及应用_IT/计算机_专业资料。文件的结构解析,数据结构1.1 struct file struct file 结构体定义在 include/linux/fs.h 中定义。文件结...
javastruct()关于java结构体
javastruct()关于java结构体_计算机软件及应用_IT/计算机_专业资料。运用java语言...public void read(String acbFile){ try { FileInputStream fis = new File...
File_operations结构体
需要对这些结构的基本了解才能够做大量感兴 趣的事情。 struct file_operations 是一个字符设备把驱动的操作和设备号联系在一起的 纽带,是一系列指针的集合,每个...
struct stat结构体简介
struct stat结构体简介_计算机软件及应用_IT/计算机_专业资料。struct stat结构体简介struct stat 结构体简介在使用这个结构体和方法时,需要引入: <sys/types.h> ...
c语言结构体与文件知识点总结
结构体 score1 name1 year1 month1 day1 定义 struct Student { int score;...打开文件 fopen(); 2.存数据 fprintf 3.关闭文件 fclose FILE * fp; 写入...
更多相关标签:
struct file | file结构体 | struct inode 结构体 | struct path 结构体 | struct stat结构体 | struct结构体 | struct ifreq 结构体 | struct icmp结构体 |