zoukankan      html  css  js  c++  java
  • file结构中的private_data

    private_data是Linux下连接VFS文件系统框架和不同文件/文件系统底层实现之间的一个核心数据结构,虽然它只是一个指针,但是一个指针可以解决所有问题。

    因 为file是VFS框架的一个基本概念,它要支持文件操作结构,例如open/read/write/release之类的接口,甚至还有poll等,只 有有了这些结构,它们才能被纳入VFS这个大家庭。但是对于不同的设备文件来说,它们只是披着文件外衣的设备,所以他要有自己特有的结构来和设备交流,而 这private_data就是这个连接的纽带。这样说可能还是比较抽象,最后是多看一些代码感受可能会深一些。

    实质就是把device设备的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;

    Reference

    [1].http://blog.csdn.net/ywh147/article/details/8684486

  • 相关阅读:
    js 中常用的方法
    js中this的四种调用模式
    JS面向对象的几种写法
    js 中的算法题,那些经常看到的
    web页面的回流,认识与避免
    js中的预加载与懒加载(延迟加载)
    Web安全测试学习笔记-DVWA-存储型XSS
    Web安全测试学习笔记-DVWA-图片上传
    Web安全测试学习笔记-DVWA-盲注(使用sqlmap)
    Web安全测试学习笔记-DVWA-SQL注入-1
  • 原文地址:https://www.cnblogs.com/cute/p/4633573.html
Copyright © 2011-2022 走看看