一句话终结

fd是数组的索引,数组是进程结构体task_struct里的数组*files*files记录着进程打开的文件, fd作为索引指向某个具体的文件files_struct

struct task_struct {
    // ...
    /* Open file information: */
    struct files_struct     *files;
    // ...
}

struct files_struct {
    // 读相关字段
    atomic_t count;
    bool resize_in_progress;
    wait_queue_head_t resize_wait;

    // 打开的文件管理结构
    struct fdtable __rcu *fdt;
    struct fdtable fdtab;

    // 写相关字段
    unsigned int next_fd;
    unsigned long close_on_exec_init[1];
    unsigned long open_fds_init[1];
    unsigned long full_fds_bits_init[1];
    struct file * fd_array[NR_OPEN_DEFAULT];
};