file 中神秘的private data指標

2021-07-04 20:06:11 字數 1597 閱讀 3817

file結構中的private_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 shm***, ulong *raddr){……

file->private_data = sfd

;

file結構中的private data

這個是linux下連線vfs檔案系統框架和不同檔案 檔案系統底層實現之間的乙個核心資料結構 雖然它只是乙個指標,但是乙個指標可以解決所有問題。我們回想一下使用者態執行緒的建立結構,函式的入口同樣是乙個void 指標,而千言萬語匯成一根指標,詩可以興 可以觀 可以群 可以怨,可以解決所有問題。因為fi...

linux中的file命令

file命令用於檢視檔案型別,今天了解到了,自己動手測了一下,寫篇文章記錄一下。localhost staticlibrary ls a.out libtest.a libtest.so main.c test.c test.h test.o localhost staticlibrary file...

PHP中關於private許可權的繼承

a 如果父類當中的成員屬性為私有的,在子類當中沒有辦法使用,但是確被繼承了下來。b 如果在父類當中擁有公有的成員方法,該成員方法輸出私有的成員屬性,在子類當中可以繼承該方法,但該成員方法輸出父類私有成員的屬性一樣也會被繼承 有如下例子 這個會輸出bbbbbb class person class s...