这个是Linux下连接VFS文件系统框架和不同文件/文件系统底层实现之间的一个核心数据结构,虽然它只是一个指针,但是一个指针可以解决所有问题,有了它,妈妈再也不用担心我的学习。我们回想一下用户态线程的创建结构,函数的入口同样是一个void*指针,而千言万语汇成一根指针,诗可以兴、可以观、可以群、可以怨,可以解决所有问题。因为file是VFS框架的一个基本概念,它要支持文件操作结构,例如open/read/write/release之类的接口,甚至还有poll等,只有有了这些结构,它们才能被纳入VFS这个大家庭。但是对于不同的设备文件来说,它们只是披着文件外衣的设备,所以他要有自己特有的结构来和设备交流,而这private_data就是这个连接的纽带。这样说可能还是比较抽象,最后是多看一些代码感受可能会深一些。
下面是之前我遇到过的一些使用private_data的一些文件:

1、tty设备

static ssize_t tty_read(struct file * file, char __user * buf, size_t count,             loff_t *ppos)
{
    int i;
    struct tty_struct * tty;
    struct inode *inode;
    struct tty_ldisc *ld;

tty = (struct tty_struct *)file->private_data;

2、tun/tap设备

static ssize_t tun_chr_aio_read(struct kiocb *iocb, const struct iovec *iv,                unsigned long count, loff_t pos)
{
    struct file *file = iocb->ki_filp;
    struct tun_struct *tun = file->private_data;

3、套接口文件

static ssize_t do_sock_read(struct msghdr *msg, struct kiocb *iocb,
        struct file *file, const struct iovec *iov,
        unsigned long nr_segs)
{
    struct socket *sock = file->private_data;
    size_t size = 0;

4、epoll文件

static int ep_eventpoll_close(struct inode *inode, struct file *file)
{
    struct eventpoll *ep = file->private_data;

5、shm文件

long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr)
{
……
    file->private_data = sfd

最新文章

  1. 利用网络流传的WebShell默认密码库寻找WebShell
  2. ADO.NET学习系列(三)----做一个登录案例
  3. 07_XPath_01_入门
  4. ZOJ 2048(Prim 或者 Kruskal)
  5. ifconfig 源码
  6. 用XAML做网页!!—边栏与页脚
  7. ssh的public key的使用
  8. spark第一篇--简介,应用场景和基本原理
  9. Objective-C基础语法高速入门
  10. hive:(group by, having;order by)的使用;group by+多个字段,以及wiki说的group by两种使用限制验证
  11. Axure之动态面板:登录面板切换
  12. 什么是URL,URL格式
  13. WPF系列(1)WPF和XAML基础
  14. MT【275】拉格朗日中值定理
  15. c语言笔记4数据的输入和输出
  16. SD-WAN助力解决多云问题
  17. centos 网卡名称修改
  18. python的paramiko模块简单应用
  19. Swift AVFoundation 二维码扫描和生成
  20. Python学习-使用Python爬取陈奕迅新歌《我们》网易云热门评论

热门文章

  1. Jsp制作验证码
  2. [CSS]第一项和最后一项样式
  3. linux下用split命令将一个大的文件拆分成若干小文件
  4. 使用parcel替代webpack制作omi-tap插件
  5. VR\AR 使用 SceneKit
  6. 关于llvm kaleidoscope: 记一次Debug血泪之路
  7. visual studio 2012打开提示 未能将网站×××配置为使用 ASP.NET 4.5 和 尚未在Web服务器上注册,您需要手动将Web服务器配置为使用ASP.NET 4.5
  8. scala写算法-用小根堆解决topK
  9. bzoj 2727: [HNOI2012]双十字
  10. js-使用JavaScript、jQuery两种方式实现全选/全不选