Please enable JavaScript.
Coggle requires JavaScript to display documents.
LPI: модель файлового ввода-вывода (open (аргументы: (режим открытия (на…
LPI: модель файлового ввода-вывода
универсальность модели
Подходит для любых типов файлов
Но на некоторые типы есть ограничечия
дескриптор файла
неотрицательное число
стандартные дескрипторы
stdin (0)
stdout (1)
stderr (2)
могут быть переопределены оболочкой при перенаправлении ввода
есть proc интерфейс всех дескрипторов
open
аргументы:
path
символьные ссылке разыменовываются
флаги
состояния файла
O_NONBLOCK
O_SYNC
O_DSYNC
O_ASYNC
Некоторые можно поменять fnctl
O_DIRECT
запрет буферизации IO
O_NOATIME
не обновлять время доступа при чтении
O_APPEND
создания файла
O_CREAT
O_EXCL
O_CLOEXEC
O_TRUNC
O_DIRECTORY
O_NOCTTY
запрет становиться управляющим терминалом текущего процесса
O_NOFOLLOW
запрет разыменования ссылок
режим открытия
на чтение
не являются битовой маской
на запись
чтение + запись
creat
депрекейтед вариант создания файла
O_CREAT | O_TRUNC | O_WRONLY
возвращает fd
ошибка: -1 + errno
read
аргументы
fd
buffer pointer
should be allocated
count
возвращает число считанных байт
0 если EOF
может не совпадать с count
EOF близко
Есть какая-то буферизация
например, построчный ввод в терминале
write
возвращает чило записанных байт
может быть меньше
если достигнут лимит размера файла
sstype_t
знаковое потому что -1 - ошибка
lseek
устанавливает курсор местоположения для файла
Не для всех типов файлов
не подходит для сокетов
аргументы
fd
offset
whence
SEEK_SET
начало файла
SEEK_CUR
текущее положение
SEEK_END
дыры
возникают при установке указателя после конца файла и записи туда данных
как будто в них записаны нули
В конкретных реализациях ФС оптимизированы по занимаемому фактически пространству
оптимизация пологается на целые нулевые блоки устройства
close
возвращает ошибку в некоторых нестандартных ФС
например в NFS
закрывать дескрипторы после окончания пользования файлом
ioctl
для операций, не укладывающихся в стандартную модель
Например, для операций зависящих от реализации
аргументы
fd
operation
... (необязательный аргумент)
зависит от реализации конкретной операции
в SUSv3 регламентировано только в части STREAMS-устройств
Особенность System V, не поддерживаются в Linux