Урок 16: File Descriptors — open, read, write
Каждый файл, канал (pipe), сокет и устройство, к которым программа обращается в Linux, представлены как файловый дескриптор (file descriptor) — небольшое целое число, указывающее на запись в таблице файлов процесса. Вызовы open, read, write, close и lseek — самые фундаментальные примитивы ввода-выво
Файловый дескриптор — это как номер столика в ресторане: вам не нужно помнить адрес кухни — просто назовите номер, и ОС точно знает, какой файл вы имеете в виду.
- файловый дескриптор
- Небольшое неотрицательное целое число, идентифицирующее открытый файл внутри процесса. stdin=0, stdout=1, stderr=2. open() возвращает наименьший доступный FD.
- open
- Системный вызов, который открывает файл и возвращает файловый дескриптор. Принимает путь, флаги (O_RDONLY, O_WRONLY, O_CREAT, O_TRUNC) и режим для создания новых файлов.
- read
- Системный вызов, который читает до n байт из файлового дескриптора в буфер. Возвращает фактически прочитанное число байт, 0 при EOF и -1 при ошибке.
- write
- Системный вызов, который записывает n байт из буфера в файловый дескриптор. Возвращает фактически записанное число байт — может записать меньше запрошенного.
- lseek
- Системный вызов, который изменяет смещение (file offset) дескриптора. Позволяет читать/писать в произвольном месте файла (random-access). SEEK_SET, SEEK_CUR, SEEK_END — это значения whence.