1、struct file

这个结构体定义在  linuxsource/include/linux/fs.h 中第960行左右

具体成员如下:

 struct file {
/*
* fu_list becomes invalid after file_free is called and queued via
* fu_rcuhead for RCU freeing
*/
union {
struct list_head fu_list;
struct rcu_head fu_rcuhead;
} f_u;
struct path f_path;
#define f_dentry f_path.dentry
#define f_vfsmnt f_path.mnt
const struct file_operations *f_op;
spinlock_t f_lock; /* f_ep_links, f_flags, no IRQ */
#ifdef CONFIG_SMP
int f_sb_list_cpu;
#endif
atomic_long_t f_count;
unsigned int f_flags;
fmode_t f_mode;
loff_t f_pos;
struct fown_struct f_owner;
const struct cred *f_cred;
struct file_ra_state f_ra; u64 f_version;
#ifdef CONFIG_SECURITY
void *f_security;
#endif
/* needed for tty driver, and maybe others */
void *private_data; #ifdef CONFIG_EPOLL
/* Used by fs/eventpoll.c to link all the hooks to this file */
struct list_head f_ep_links;
#endif /* #ifdef CONFIG_EPOLL */
struct address_space *f_mapping;
#ifdef CONFIG_DEBUG_WRITECOUNT
unsigned long f_mnt_write_state;
#endif
};

从内核来看,每一个打开的文件都需要有一个file结构体来描述它

具体查看

http://blog.csdn.net/wangchaoxjtuse/article/details/6036684

2、struct inode

  索引节点对象由inode结构体表示,定义文件在linux/fs.h中。

linux 中每一个文件都需要有一个inode节点来描述

 

 struct inode {
  struct hlist_node i_hash; 哈希表
  struct list_head i_list; 索引节点链表
  struct list_head i_dentry; 目录项链表
  unsigned long i_ino; 节点号
  atomic_t i_count; 引用记数
  umode_t i_mode; 访问权限控制
  unsigned int i_nlink; 硬链接数
  uid_t i_uid; 使用者id
  gid_t i_gid; 使用者id组
  kdev_t i_rdev; 实设备标识符
  loff_t i_size; 以字节为单位的文件大小
  struct timespec i_atime; 最后访问时间
  struct timespec i_mtime; 最后修改(modify)时间
  struct timespec i_ctime; 最后改变(change)时间
  unsigned int i_blkbits; 以位为单位的块大小
  unsigned long i_blksize; 以字节为单位的块大小
  unsigned long i_version; 版本号
  unsigned long i_blocks; 文件的块数
  unsigned short i_bytes; 使用的字节数
  spinlock_t i_lock; 自旋锁
  struct rw_semaphore i_alloc_sem; 索引节点信号量
  struct inode_operations *i_op; 索引节点操作表
  struct file_operations *i_fop; 默认的索引节点操作
  struct super_block *i_sb; 相关的超级块
  struct file_lock *i_flock; 文件锁链表
  struct address_space *i_mapping; 相关的地址映射
  struct address_space i_data; 设备地址映射
  struct dquot *i_dquot[MAXQUOTAS];节点的磁盘限额
  struct list_head i_devices; 块设备链表
  struct pipe_inode_info *i_pipe; 管道信息
  struct block_device *i_bdev; 块设备驱动
  unsigned long i_dnotify_mask;目录通知掩码
  struct dnotify_struct *i_dnotify; 目录通知
  unsigned long i_state; 状态标志
  unsigned long dirtied_when;首次修改时间
  unsigned int i_flags; 文件系统标志
  unsigned char i_sock; 套接字
  atomic_t i_writecount; 写者记数
  void *i_security; 安全模块
  __u32 i_generation; 索引节点版本号
  union {
  void *generic_ip;文件特殊信息
  } u;
  };

1、Linux驱动重要的数据结构的更多相关文章

  1. Linux驱动学习之常用的模块操作命令

    1.常用的模块操作命令 (1)lsmod(list module,将模块列表显示),功能是打印出当前内核中已经安装的模块列表 (2)insmod(install module,安装模块),功能是向当前 ...

  2. Linux驱动学习步骤(转载)

    1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. 学会写驱动的makefile 4. 写一简单char驱动,makefile编译通过,可以insmod, ls ...

  3. 迅为4412开发板Linux驱动教程——总线_设备_驱动注册流程详解

    本文转自:http://www.topeetboard.com 视频下载地址: 驱动注册:http://pan.baidu.com/s/1i34HcDB 设备注册:http://pan.baidu.c ...

  4. 编写linux驱动所用到的头文件(转)

    转自:http://blog.csdn.net/lufeiop02/article/details/6448497 关于linux驱动(应用)程序头文件使用 收藏 驱动程序: #include < ...

  5. linux驱动之I2C

    include/linux/i2c.h struct i2c_msg;struct i2c_algorithm;struct i2c_adapter;struct i2c_client;struct ...

  6. linux驱动面试题目汇总

    http://blog.csdn.net/blueice8601/article/details/7666427 1.linux驱动分类 2.信号量与自旋锁 3.platform总线设备及总线设备如何 ...

  7. Linux驱动开发学习的一些必要步骤

      1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. 学会写驱动的makefile 4. 写一简单char驱动,makefile编译通过,可以insmod, ...

  8. 【linux驱动】linux驱动总览

    欢迎转载,转载时需保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http:// ...

  9. linux驱动之中断处理过程C程序部分

    当发生中断之后,linux系统在汇编阶段经过一系列跳转,最终跳转到asm_do_IRQ()函数,开始C程序阶段的处理.在汇编阶段,程序已经计算出发生中断的中断号irq,这个关键参数最终传递给asm_d ...

随机推荐

  1. 在osx下通过vmware无GUI方式运行centos 7

    启动虚拟机: /Applications/VMware\ Fusion.app/Contents/Library/vmrun -T fusion start "CentOS 64-bit.v ...

  2. mysql中修改view的definer

    我常用的工具是navicat,但是修改definer不能用工具,只能用命令行: 数据库迁移到其他服务器上,会报definer错误,修改view的definer方法如下(比如把definer改为本地的, ...

  3. 关键字extern

    extern 可以置于  变量  或  函数  前,  以表明变量 或 函数 的定义在别的文件中,  下面代码用到的这些变量  或 函数是外来的,  不是本文件定义的, 提示链接器遇到此变量和函数时在 ...

  4. Mysql技术内幕(第四版)读书笔记(一)

    题记:写代码已经有2年了,学到了很多知识,但是没有一个好习惯去记录,去分享,好多知识点都会忘记,所以从今天开始学着像大牛一样去记录自己经历项目的点点滴滴,先从最近读<Mysql技术内幕>开 ...

  5. webform文件的上传

    文件上传 (控件:Fileupload) --文件映射:Server.MapPath(path)(相 对转绝对路径)--保存到指定路径:Fileupload.SaveAs 例子:点击按钮,获取上传图片 ...

  6. 第六百一十八天 how can I 坚持

    此刻好烦,乱七八糟的,红米2死机也没弄好,哎. 下周三去长城,感觉还有很大提升空间啊,什么都不会.哎. 眼累的不行了,得抓紧睡觉了.ls他们来北京开年会了.. 明天,zjp来找我玩呢. 睡觉了.累.

  7. javascript获取当前时间

    function getCurrentDate(){ var myDate = new Date(); var month = myDate.getMonth()+1; var day = myDat ...

  8. begin-end语句块在mysql中的使用问题

    在最近在通过navicate连接mysql数据库时,进行查询操作: delimiter $$BEGIN SET @a=1; if (@a > 0) THEN SELECT COUNT(*) fr ...

  9. KBMMW 中 IOS IPv6 的解决

    自从今年苹果强制新上架的APP 必须支持Ipv6,很多原来需要网络支持的APP 就没法上架了. 别的我们就不说了,先说说kbmmw 中,如何解决这个问题. 要测试你的app 是否支持ipv6, 首先要 ...

  10. Spring基本框架

    1.Spring基本框架的概念 Spring 框架是一个分层架构,由 7 个定义良好的模块组成.Spring模块构建在核心容器之上,核心容器定义创建.配置和管理bean的方式.组成Spring框架的每 ...