Ядро Unix представляет открытые файлы, используя три структуры данных:Descriptor table
,File table
, иv-node table
.
Когда процесс дважды открывает файл, он получает два разных дескриптора в descriptor table
, две записи в file table
(. так что они имеют разные позиции в одном и том же файле ), и они оба указывают на одну запись в v-node table
.
А дочерний процесс наследует родительский процесс descriptor table
, поэтому ядро поддерживает один descriptor table
для каждого процесса соответственно. Но два дескриптора из разных процессов указывают на одну и ту же запись в open file table
.
Так
fork
в одном файле?Это означает, что два процесса совместно используют информацию о позиции (смещении )в одном и том же файле.