zms123456 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
..
README.md 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
SConscript 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc.h 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc_cmdline.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc_cpuinfo.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc_devices.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc_filesystems.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc_loadavg.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc_meminfo.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc_mounts.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc_net.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc_partitions.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc_pid.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc_self.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc_stat.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc_tty.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc_uptime.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
proc_version.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
procfs.c 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten
procfs.h 4343d32df4 [components][fs]sync procfs (#9206) vor 3 Monaten

README.md

进程文件系统 (procfs)

数据结构

struct proc_dentry
{
    rt_uint32_t mode;
    rt_atomic_t ref_count;

    struct proc_dentry *parent;
    struct dfs_vfs_node node;

    const struct dfs_file_ops *fops;
    const struct proc_ops *ops;

    char *name;
    void *data;
};
root { mode: S_IFDIR, ref_count: 1, parent: root, name: /, child->next: file1->node }
    |
    |—— file1 { mode: S_IFREG, ref_count: 1, parent: root, name: file1, node->next: link1->node }
    |—— link1 { mode: S_IFLNK, ref_count: 1, parent: root, name: link1, data: fullpath, node->next: dir1->node }
    |—— dir1 { mode: S_IFDIR, ref_count: 1, parent: root, name: dir1, node->next: file3->node, child->next: file2->node }
    |    |
    |    |—— dir2 { mode: S_IFDIR, ref_count: 1, parent: dir1, name: dir2, node->next: link2->node }
    |    |—— link2 { mode: S_IFLNK, ref_count: 1, parent: dir1, name: link2, data: fullpath, node->next: file2->node }
    |    |—— file2 { mode: S_IFREG, ref_count: 1, parent: dir1, name: file2 }
    |
    |—— file3 { mode: S_IFREG, ref_count: 1, parent: root, name: file3 }

API 介绍

struct proc_dentry *dfs_proc_find(const char *name);

struct proc_dentry *proc_mkdir_data(const char *name, mode_t mode, struct proc_dentry *parent,
                                    const struct dfs_file_ops *fops, void *data);
struct proc_dentry *proc_mkdir_mode(const char *name, mode_t mode, struct proc_dentry *parent);
struct proc_dentry *proc_mkdir(const char *name, struct proc_dentry *parent);

struct proc_dentry *proc_create_data(const char *name, mode_t mode, struct proc_dentry *parent,
                                     const struct dfs_file_ops *fops, void *data);

struct proc_dentry *proc_symlink(const char *name, struct proc_dentry *parent, const char *dest);

struct proc_dentry *proc_acquire(struct proc_dentry *dentry);
void proc_release(struct proc_dentry *dentry);

void proc_remove(struct proc_dentry *dentry);
  • dfs_proc_find

查找指定节点,并返回节点数据指针

| 入参 | 说明 | | ---- | ---------------------------------------------------- | | name | 从 procfs 的 root 起始的完整路径,比如 “/dir1/file2” |

  • proc_mkdir_data

创建一个目录,并返回节点数据指针

| 入参 | 说明 | | ------ | ------------------------------------------------------------ | | name | 从 procfs 的 root 起始的完整路径,比如 “/dir1/file2”
从 parent 起始的完整路径 | | mode | 权限配置 | | parent | 指定创建目录的起始节点 | | fops | 文件操作接口配置 | | data | 私有数据 |

  • proc_mkdir_mode

创建一个目录,并返回节点数据指针

| 入参 | 说明 | | ------ | ------------------------------------------------------------ | | name | 从 procfs 的 root 起始的完整路径,比如 “/dir1/file2”
从 parent 起始的完整路径 | | mode | 权限配置 | | parent | 指定创建目录的起始节点 |

  • proc_mkdir

创建一个目录,并返回节点数据指针

| 入参 | 说明 | | ---- | ------------------------------------------------------------ | | name | 从 procfs 的 root 起始的完整路径,比如 “/dir1/file2”
从 parent 起始的完整路径 | | mode | 权限配置 |

  • proc_create_data

创建一个文件,并返回节点数据指针

| 入参 | 说明 | | ------ | ------------------------------------------------------------ | | name | 从 procfs 的 root 起始的完整路径,比如 “/dir1/file2”
从 parent 起始的完整路径 | | mode | 权限配置 | | parent | 指定创建文件的起始节点 | | fops | 文件操作接口配置 | | data | 私有数据 |

  • proc_symlink

创建一个符号链接,并返回节点数据指针

| 入参 | 说明 | | ------ | ------------------------------------------------------------ | | name | 从 procfs 的 root 起始的完整路径,比如 “/dir1/file2”
从 parent 起始的完整路径 | | parent | 指定创建文件的起始节点 | | dest | 链接的目标文件完整路径 |

  • proc_acquire

引用一个节点,并返回节点数据指针

| 入参 | 说明 | | ------ | -------------- | | dentry | 需要引用的节点 |

  • proc_release

释放一个节点

| 入参 | 说明 | | ------ | -------------- | | dentry | 需要释放的节点 |

  • proc_remove

删除一个节点包含子节点

| 入参 | 说明 | | ------ | -------------- | | dentry | 需要删除的节点 |

msh 调试命令

  • proc_dump

遍历打印指定节点含子节点的信息(名称、引用计数),比如 proc_dump /dir1 或者 proc_dump

  • proc_remove

删除指定节点含子节点,比如 proc_remove /dir1 或者 proc_remove /file3

  • proc_symlink

创建一个符号链接,proc_symlink /link3 /mnt

  • proc_echo

创建一个空文件,proc_echo /file4

  • proc_mkdir

创建一个空目录,proc_mkdir /dir3

  • proc_pid

创建一个 pid 目录,proc_pid /101