file中private_data,fileprivate_data

來源:互聯網
上載者:User

file中private_data,fileprivate_data

這個是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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.