54#define PROC_ERROR (-1)
57#define PROCFS_DEFAULT_MODE 0550
60#define FMODE_64BITHASH ((fmode_t)0x400)
62#define FMODE_32BITHASH ((fmode_t)0x200)
66#define FMODE_WRITE_IOCTL ((fmode_t)0x100)
68#define FMODE_EXCL ((fmode_t)0x80)
70#define FMODE_NDELAY ((fmode_t)0x40)
72#define FMODE_EXEC ((fmode_t)0x20)
74#define FMODE_PWRITE ((fmode_t)0x10)
76#define FMODE_PREAD ((fmode_t)0x8)
78#define FMODE_LSEEK ((fmode_t)0x4)
80#define FMODE_WRITE ((fmode_t)0x2)
82#define FMODE_READ ((fmode_t)0x1)
144#define PROCDATA(n) (sizeof(struct ProcData) + (n))
146#define S_IALLUGO (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
struct ProcDirEntry * ProcCreate(const char *name, mode_t mode, struct ProcDirEntry *parent, const struct ProcFileOperations *procFops)
create a proc node
struct ProcDirEntry * CreateProcEntry(const char *name, mode_t mode, struct ProcDirEntry *parent)
create a proc node
struct ProcDirEntry * ProcMkdir(const char *name, struct ProcDirEntry *parent)
create a proc directory node
void ProcFsInit(void)
init proc fs
void RemoveProcEntry(const char *name, struct ProcDirEntry *parent)
remove a proc node
proc 目录/文件项, @notethinking 直接叫 ProcEntry不香吗 ? 操作 /proc的 真正结构体
struct ProcFile * pf
proc文件指针
struct ProcDirEntry * next
struct ProcDirEntry * subdir
当前目录项的关系项
struct ProcDirEntry * pdirCurrent
当前目录
const struct ProcFileOperations * procFileOps
驱动程序,每个 /proc 下目录的驱动程序都不一样
struct ProcDirEntry * parent
struct SeqBuf * sbuf
序列号BUF
unsigned long long fVersion
版本号
struct ProcDirEntry * pPDE
目录项
真正最后能操作pro file的接口,proc本质是个内存文件系统, vfs - > ProcFileOperations
int(* read)(struct SeqBuf *m, void *v)
ssize_t(* write)(struct ProcFile *pf, const char *buf, size_t count, loff_t *ppos)
int(* release)(struct Vnode *vnode, struct ProcFile *pf)
int(* open)(struct Vnode *vnode, struct ProcFile *pf)
struct ProcDirEntry * pPDE
vnode并不包含文件名,因为 vnode和文件名是 1:N 的关系
ARG_NUM_3 ARG_NUM_1 ARG_NUM_2 ARG_NUM_2 ARG_NUM_3 ARG_NUM_1 ARG_NUM_4 ARG_NUM_2 ARG_NUM_2 ARG_NUM_5 ARG_NUM_2 ARG_NUM_0 ARG_NUM_2 ARG_NUM_1 ARG_NUM_2 ARG_NUM_3 ARG_NUM_7 ARG_NUM_2 ARG_NUM_3 ARG_NUM_2 ARG_NUM_4 ARG_NUM_5 ARG_NUM_6 ARG_NUM_3 ARG_NUM_5 ARG_NUM_7 ARG_NUM_1 ARG_NUM_4 ARG_NUM_5 ARG_NUM_4 ARG_NUM_7 ARG_NUM_2 ARG_NUM_3 ARG_NUM_7 ARG_NUM_7 ARG_NUM_3 ARG_NUM_3 ARG_NUM_3 ARG_NUM_7 ARG_NUM_3 ARG_NUM_2 char ARG_NUM_2 ARG_NUM_1 ARG_NUM_0 ARG_NUM_0 ARG_NUM_3 void ARG_NUM_1 ARG_NUM_0 unsigned ARG_NUM_0 ARG_NUM_2 ARG_NUM_3 ARG_NUM_2 ARG_NUM_5 ARG_NUM_3 ARG_NUM_3 ARG_NUM_4 ARG_NUM_1 ARG_NUM_1 ARG_NUM_3 ARG_NUM_2 mode_t