Linux那些事儿之我是Sysfs(9)sysfs文件系统模型
?最近Linus炮轟C++,“C++是一種糟糕的(horrible)語言。而且因?yàn)橛写罅坎粔驑?biāo)準(zhǔn)的程序員在使用而使許多真正懂得底層問題,而不會折騰那些白癡‘對象模型’”。牛人就是牛氣沖天阿。
在fs/sysfs/下面,除去Makefile和Kconfig,還有6個文件。其中file.c, dir.c, symblink.c分別代表了在sysfs文件系統(tǒng)中當(dāng)文件類型為普通文件,目錄,符號連接時的各自的file operations結(jié)構(gòu)體的實(shí)現(xiàn)。mount.c包括了sysfs的初始化函數(shù)。sysfs.h就是頭文件,里面有函數(shù)的原形,并將其extern出去。
sysfs的文件系統(tǒng)的所讀寫的信息是存放在kobject當(dāng)中,那么dentry是如何與kobject聯(lián)系起來的呢?是通過kernfs_node。
sysfs文件系統(tǒng)有自己的dirent結(jié)構(gòu),dirent = directory entry (目錄實(shí)體)。sysfs中,每一個dentry對應(yīng)了一個dirent結(jié)構(gòu),dentry->d _fsdata是一個void的指針,它指向kernfs_node 結(jié)構(gòu)。
include/linux/kernfs.h
struct kernfs_node {atomic_t count;atomic_t active;
#ifdef CONFIG_DEBUG_LOCK_ALLOCstruct lockdep_map dep_map;
#endif/** Use kernfs_get_parent() and kernfs_name/path() instead of* accessing the following two fields directly. If the node is* never moved to a different parent, it is safe to access the* parent directly.*/struct kernfs_node *parent;const char *name;struct rb_node rb;const void *ns; /* namespace tag */unsigned int hash; /* ns + name hash */union {struct kernfs_elem_dir dir;struct kernfs_elem_symlink symlink;struct kernfs_elem_attr attr;};void *priv;unsigned short flags;umode_t mode;unsigned int ino;struct kernfs_iattrs *iattr;
};
?
count是引用計(jì)數(shù)。
總結(jié)
以上是生活随笔為你收集整理的Linux那些事儿之我是Sysfs(9)sysfs文件系统模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux那些事儿之我是Sysfs(8)
- 下一篇: Linux那些事儿 之 戏说USB(1)