Чтобы понять это, вы должны ознакомиться с системными вызовами POSIX. Это интерфейс, используемый программой пользовательского пространства для взаимодействия с ядром.
lseek
, write
, close
, mmap
, munmap
и fstat
- это все системные вызовы и описаны в разделе 2 руководства по linux.
Вкратце, lseek
перемещает внутренний указатель предоставленного дескриптора файла на байт с позицией, на которую указывает второй аргумент, начиная с SEEK_SET
(начало), SEEK_CUR
(текущая позиция) или SEEK_END
(конец). Любые последовательные вызовы read
и write
для одного и того же дескриптора начнут свое действие с этой позиции. Обратите внимание, что lseek
реализован не для всех типов дескрипторов - он имеет смысл для файла на диске, но не для сокета или канала.
write
копирует предоставленный буфер в пространство ядра и возвращает количество фактически записанных байтов. В зависимости от типа дескриптора ядро может записать данные на диск или отправить их по сети. Как правило, это дорогостоящая операция, поскольку включает передачу этого буфера в ядро.
close
закрывает предоставленный дескриптор, и все связанные с ним ресурсы в ядре освобождаются. Обратите внимание, что у каждого процесса есть ограничение на количество одновременно открытых дескрипторов, поэтому иногда необходимо закрыть дескрипторы, чтобы не достичь этого предела.
mmap
является сложным системным вызовом и используется для многих целей, включая разделяемую память. Общее использование, однако, состоит в том, чтобы выделить больше памяти для процесса. Библиотечные функции malloc
и calloc
обычно используют его для внутреннего использования.
munmap
освобождает память педали mmap
.
fstat
возвращает различную информацию, хранящуюся в файловой системе о размере файла, последнем изменении, разрешениях и т. Д.