日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

kernel部分数据结构列表三(inode)

發(fā)布時(shí)間:2024/7/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kernel部分数据结构列表三(inode) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
kernel部分?jǐn)?shù)據(jù)結(jié)構(gòu)列表三(inode)

/*
*索引節(jié)點(diǎn)對(duì)象由inode結(jié)構(gòu)體表示,定義文件在linux/fs.h中
*/

struct inode {
??????? struct hlist_node?????? i_hash;????????????? /* 哈希表 */
??????? struct list_head??????? i_list;????????????? /* 索引節(jié)點(diǎn)鏈表 */
??????? struct list_head??????? i_dentry;??????????? /* 目錄項(xiàng)鏈表 */
??????? unsigned long?????????? i_ino;?????????????? /* 節(jié)點(diǎn)號(hào) */
??????? atomic_t??????????????? i_count;???????????? /* 引用記數(shù) */
??????? umode_t???????????????? i_mode;????????????? /* 訪問(wèn)權(quán)限控制 */
??????? unsigned int??????????? i_nlink;???????????? /* 硬鏈接數(shù) */
??????? uid_t?????????????????? i_uid;?????????????? /* 使用者id */
??????? gid_t?????????????????? i_gid;?????????????? /* 使用者id組 */
??????? kdev_t????????????????? i_rdev;????????????? /* 實(shí)設(shè)備標(biāo)識(shí)符 */
??????? loff_t????????????????? i_size;????????????? /* 以字節(jié)為單位的文件大小 */
??????? struct timespec???????? i_atime;???????????? /* 最后訪問(wèn)時(shí)間 */
??????? struct timespec???????? i_mtime;???????????? /* 最后修改(modify)時(shí)間 */
??????? struct timespec???????? i_ctime;???????????? /* 最后改變(change)時(shí)間 */
??????? unsigned int??????????? i_blkbits;?????????? /* 以位為單位的塊大小 */
??????? unsigned long?????????? i_blksize;?????????? /* 以字節(jié)為單位的塊大小 */
??????? unsigned long?????????? i_version;?????????? /* 版本號(hào) */
??????? unsigned long?????????? i_blocks;??????????? /* 文件的塊數(shù) */
??????? unsigned short????????? i_bytes;???????????? /* 使用的字節(jié)數(shù) */
??????? spinlock_t????????????? i_lock;????????????? /* 自旋鎖 */
??????? struct rw_semaphore???? i_alloc_sem;???????? /* 索引節(jié)點(diǎn)信號(hào)量 */
??????? struct inode_operations *i_op;?????????????? /* 索引節(jié)點(diǎn)操作表 */
??????? struct file_operations? *i_fop;????????????? /* 默認(rèn)的索引節(jié)點(diǎn)操作 */
??????? struct super_block????? *i_sb;?????????????? /* 相關(guān)的超級(jí)塊 */
??????? struct file_lock??????? *i_flock;??????????? /* 文件鎖鏈表 */
??????? struct address_space??? *i_mapping;????????? /* 相關(guān)的地址映射 */
??????? struct address_space??? i_data;????????????? /* 設(shè)備地址映射 */
??????? struct dquot??????????? *i_dquot[MAXQUOTAS]; /* 節(jié)點(diǎn)的磁盤(pán)限額 */
??????? struct list_head??????? i_devices;?????????? /* 塊設(shè)備鏈表 */
??????? struct pipe_inode_info? *i_pipe;???????????? /* 管道信息 */
??????? struct block_device???? *i_bdev;???????????? /* 塊設(shè)備驅(qū)動(dòng) */
??????? unsigned long?????????? i_dnotify_mask;????? /* 目錄通知掩碼 */
??????? struct dnotify_struct?? *i_dnotify;????????? /* 目錄通知 */
??????? unsigned long?????????? i_state;???????????? /* 狀態(tài)標(biāo)志 */
??????? unsigned long?????????? dirtied_when;??????? /* 首次修改時(shí)間 */
??????? unsigned int??????????? i_flags;???????????? /* 文件系統(tǒng)標(biāo)志 */
??????? unsigned char?????????? i_sock;????????????? /* 可能是個(gè)套接字吧 */
??????? atomic_t??????????????? i_writecount;??????? /* 寫(xiě)者記數(shù) */
??????? void??????????????????? *i_security;???????? /* 安全模塊 */
??????? __u32?????????????????? i_generation;??????? /* 索引節(jié)點(diǎn)版本號(hào) */
??????? union {
??????????????? void??????????? *generic_ip;???????? /* 文件特殊信息 */
??????? } u;
};


/*
*索引節(jié)點(diǎn)的操作inode_operations定義在linux/fs.h中
*/

struct inode_operations {
??????? int (*create) (struct inode *, struct dentry *,int);
??????? /*VFS通過(guò)系統(tǒng)調(diào)用create()和open()來(lái)調(diào)用該函數(shù),從而為dentry對(duì)象創(chuàng)建一個(gè)新的索引節(jié)點(diǎn)。在創(chuàng)建時(shí)使用mode制定初始模式*/
??????? struct dentry * (*lookup) (struct inode *, struct dentry *);
??????? /*該韓式在特定目錄中尋找索引節(jié)點(diǎn),該索引節(jié)點(diǎn)要對(duì)應(yīng)于dentry中給出的文件名*/
??????? int (*link) (struct dentry *, struct inode *, struct dentry *);
??????? /*該函數(shù)被系統(tǒng)調(diào)用link()電泳,用來(lái)創(chuàng)建硬連接。硬鏈接名稱由dentry參數(shù)指定,連接對(duì)象是dir目錄中l(wèi)d_dentry目錄想所代表的文件*/
??????? int (*unlink) (struct inode *, struct dentry *);
??????? /*該函數(shù)被系統(tǒng)調(diào)用unlink()調(diào)用,從目錄dir中刪除由目錄項(xiàng)dentry制動(dòng)的索引節(jié)點(diǎn)對(duì)象*/
??????? int (*symlink) (struct inode *, struct dentry *, const char *);
??????? /*該函數(shù)被系統(tǒng)電泳symlik()調(diào)用,創(chuàng)建符號(hào)連接,該符號(hào)連接名稱由symname指定,連接對(duì)象是dir目錄中的dentry目錄項(xiàng)*/
??????? int (*mkdir) (struct inode *, struct dentry *, int);
??????? /*該函數(shù)被mkdir()調(diào)用,創(chuàng)建一個(gè)新魯姆。創(chuàng)建時(shí)使用mode制定的初始模式*/
??????? int (*rmdir) (struct inode *, struct dentry *);
??????? /*該函數(shù)被系統(tǒng)調(diào)用rmdir()調(diào)用,刪除dir目錄中的dentry目錄項(xiàng)代表的文件*/
??????? int (*mknod) (struct inode *, struct dentry *, int, dev_t);
??????? /*該函數(shù)被系統(tǒng)調(diào)用mknod()調(diào)用,創(chuàng)建特殊文件(設(shè)備文件、命名管道或套接字)。要?jiǎng)?chuàng)建的文件放在dir目錄中,其目錄項(xiàng)問(wèn)dentry,關(guān)聯(lián)的設(shè)備為rdev,初始權(quán)限由mode指定*/
??????? int (*rename) (struct inode *, struct dentry *,
?????????????????????? struct inode *, struct dentry *);
??????? /*VFS調(diào)用該函數(shù)來(lái)移動(dòng)文件。文件源路徑在old_dir目錄中,源文件由old_dentry目錄項(xiàng)所指定,目標(biāo)路徑在new_dir目錄中,目標(biāo)文件由new_dentry指定*/
??????? int (*readlink) (struct dentry *, char *, int);
??????? /*該函數(shù)被系統(tǒng)調(diào)用readlink()調(diào)用,拷貝數(shù)據(jù)到特定的緩沖buffer中。拷貝的數(shù)據(jù)來(lái)自dentry指定的符號(hào)鏈接,最大拷貝大小可達(dá)到buflen字節(jié)*/
??????? int (*follow_link) (struct dentry *, struct nameidata *);
??????? /*該函數(shù)由VFS調(diào)用,從一個(gè)符號(hào)連接查找他指向的索引節(jié)點(diǎn),由dentry指向的連接被解析*/
??????? int (*put_link) (struct dentry *, struct nameidata *);
??????? /*在follow_link()調(diào)用之后,該函數(shù)由vfs調(diào)用進(jìn)行清楚工作*/
??????? void (*truncate) (struct inode *);
??????? /*該函數(shù)由VFS調(diào)用,修改文件的大小,在調(diào)用之前,索引節(jié)點(diǎn)的i_size項(xiàng)必須被設(shè)置成預(yù)期的大小*/
??????? int (*permission) (struct inode *, int);
??????? /*該函數(shù)用來(lái)檢查給低昂的inode所代表的文件是否允許特定的訪問(wèn)模式,如果允許特定的訪問(wèn)模式,返回0,否則返回負(fù)值的錯(cuò)誤碼。多數(shù)文件系統(tǒng)都將此區(qū)域設(shè)置為null,使用VFS提供的通用方法進(jìn)行檢查,這種檢查操作僅僅比較索引及誒但對(duì)象中的訪問(wèn)模式位是否和mask一致,比較復(fù)雜的系統(tǒng),比如支持訪問(wèn)控制鏈(ACL)的文件系統(tǒng),需要使用特殊的permission()方法*/
??????? int (*setattr) (struct dentry *, struct iattr *);
??????? /*該函數(shù)被notify_change調(diào)用,在修改索引節(jié)點(diǎn)之后,通知發(fā)生了改變事件*/
??????? int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *);
??????? /*在通知索引節(jié)點(diǎn)需要從磁盤(pán)中更新時(shí),VFS會(huì)調(diào)用該函數(shù)*/
??????? int (*setxattr) (struct dentry *, const char *,
???????????????????????? const void *, size_t, int);
??????? /*該函數(shù)由VFS調(diào)用,向dentry指定的文件設(shè)置擴(kuò)展屬性,屬性名為name,值為value*/
??????? ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
??????? /*該函數(shù)被VFS調(diào)用,向value中拷貝給定文件的擴(kuò)展屬性name對(duì)應(yīng)的數(shù)值*/
??????? ssize_t (*listxattr) (struct dentry *, char *, size_t);
??????? /*該函數(shù)將特定文件所有屬性別表拷貝到一個(gè)緩沖列表中*/
??????? int (*removexattr) (struct dentry *, const char *);
??????? /*該函數(shù)從給定文件中刪除指定的屬性*/
};

posted on 2011-06-24 08:53?Neddy11 閱讀(...) 評(píng)論(...) 編輯 收藏

轉(zhuǎn)載于:https://www.cnblogs.com/Neddy/archive/2011/06/24/2088605.html

總結(jié)

以上是生活随笔為你收集整理的kernel部分数据结构列表三(inode)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。