Сокращенный вариант структур данных в ядре Linux 2.2.26. Структуры описаны в include/linux/{sched.h,fs.h,dcache.h}.
ФД -файловый дескриптор, ФС - файловая система
struct task_struct {
...
struct files_struct *files; //информация об открытых файлах процесса
...
}
struct files_struct {
atomic_t count; //количество открытых файлов
int max_fds; //максимальное доступное количество ФД
int max_fdset; //максимальный номер использованного ФД
int next_fd; //минимальный свободный номер ФД
fd_set *close_on_exec; //битовая карта ФД, которые необходимо закрыть при вызове exec()
fd_set *open_fds; //битовая карта открытых ФД
struct file * fd_array[NR_OPEN_DEFAULT]; //массив указателей на открытые файлы
...
};
struct file {
struct dentry *f_dentry; //ссылка на запись в каталоге (имя и inode файла)
struct file_operations *f_op; //указатели на функции драйвера ФС для работы с файлом
atomic_long_t f_count; //количество открытых файловых дескрипторов процесса, указывающих на файл
unsigned int f_flags; //флаги, указанные при открытии
loff_t f_pos; //позиция головки ввода/вывода
fmode_t f_mode; //права доступа в момент открытия
struct fown_struct f_owner; //uid,gid файла в момент открытия
...
void *private_data; //место для хранения специфичных для драйвера данных
};
struct dentry {
struct inode *d_inode;
struct qstr d_name;
...
}
struct inode {
...
kdev_t i_dev; //номер устройства, на котором расположен inode
unsigned long i_ino; //номер inode
umode_t i_mode;//права доступа
nlink_t i_nlink; //число имён
uid_t i_uid;
gid_t i_gid;
...
struct super_block *i_sb; // ссылка на суперблок ФС
...
unsigned int i_count; //общее число ФД, ссылающихся на этот файл
struct file_lock * i_flock; //блокировки файла
...
}
struct file_operations {
int (*open) (struct inode *, struct file *);
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
int (*flush) (struct file *);
int (*release) (struct inode *, struct file *);
...
}
Прикрепленный файл | Размер |
---|---|
fd_tables.png | 10.19 КБ |