Файловый дескриптор (file descriptor)
Целочисленный индекс в таблице открытых файлов процесса (per-process file descriptor table). Каждая запись ссылается на запись в системной open file table (struct file), которая, в свою очередь, ссылается на inode.
Свойства:
- Локален для процесса; наследуется через
fork()(если не установленFD_CLOEXEC). - Стандартные номера:
0—stdin1—stdout2—stderr
- Системные вызовы:
open(2),close(2),read(2),write(2),dup(2),dup2(2),fcntl(2),poll(2),select(2),epoll_create1(2),openat(2).
int fd = open("/etc/passwd", O_RDONLY);
read(fd, buf, 128);
close(fd);
Inode
Структура файловой системы, хранящая метаданные файла, но не имя. Имя — запись в каталоге, связывающая строку с номером inode.
Поля (см. struct stat, man inode(7)):
st_mode— тип файла и режим доступаst_uid,st_gid— владелец и группаst_size— размер в байтахst_atime,st_mtime,st_ctime— времена доступа, модификации содержимого, изменения метаданныхst_nlink— счётчик жёстких ссылокst_blocks,st_blksize— блочное представление- указатели на блоки данных (зависит от ФС: ext4, XFS, Btrfs)
Уровни абстракции
Пример
$ ls -li test.txt
123456 -rw-r--r-- 1 user user 42 Oct 20 22:00 test.txt
123456 — номер inode. При open("test.txt") ядро создаёт struct file и возвращает fd процессу.