Please enable JavaScript.
Coggle requires JavaScript to display documents.
LPI: дополнительные сведения о файловом IO - Coggle Diagram
LPI: дополнительные сведения о файловом IO
Файловые сущности
дескрипторы файлов процесса
файловые дескрипторы одного процесса могут ссылаться на одну общесистемную запись
файловые дескрипторы разных процессов могут ссылаться на одну общесистемную запись
Содержит сотояние флага CLOSE_ON_EXEC
общесистемная таблица открытых файлов
содержит дескрипторы открытых файлов
содержит флаги открытия файла
содержит информацию о файловом смещении
режим доступа к файлу
установки режима управления по сигналам
ссылку на индексный дескриптор
таблица индексных дескрипторов
содержит информацию о блокировках
тип файла
регулярный
сокет
FIFO-устройство
права доступа
размер
метки времени
truncate и ftruncate
одна функция - фиксировать размер файла
ftruncate по SuSv2 должна увеличивать файл дырой
truncate может при попытке увеличения возвращать ошибку (на усмотрение реализации)
truncate принимает path
ftruncate принимает fd
фрагментированный ввод-вывод
writev, readv
ввод-вывод по оффсету
атомарные
менее затратные
есть комбинация
preadv, pwritev
pread, pwrite
Операции над флагами открытия файла
не все флаги можно поменять
примеры нельзя
O_TRUNC
игнорируются
можно
O_NONBLOCK
неблокирующий вывод
если данные не готовы - EAGAIN или EWOULDBLOCK
синонимы
O_ASYNC
O_DIRECT
O_APPEND
O_NOATIME
соотношение может варьироваться между UNIX-ами
для чего может понадобиться
если файл не был открыт программой (стандартные, например)
если фд получен не из open (например из pipe)
Операции с файловыми дескрипторами
dup
dup
dup2
dup3
Только в линукс
позволяет установить флаг CLOSE_ON_EXEC
fnctl
огромное число аргументов
F_GETFL
F_DUPFD
F_DUPFD_CLOEXEC
Атомарность open
флаг O_EXCL
O_APPEND
обеспечивает атомарность добавления в конец
/dev/fd
символьная ссылка на /proc/self/fd
помогает оперировать с файлами по дескриптору
полезно в скриптах
алиасы для стандартных фд
Временные файлы
mkstemp
создает уникальное имя файла по шаблону
шаблон должен содержать в конце XXXXXX
XXXXXX меняется на сгененрированное имя
tmpfile
unlink сразу после создания
файл удаляется после close
небезопасные методы