Дескриптор открытого файла, лежащий в основе fp1
, указывает на описание открытого файла (да - это терминология POSIX; см. open()
). После fork()
каждый процесс имеет собственный дескриптор открытого файла для файла, но они разделяют описание открытого файла. И позиция чтения является свойством описания открытого файла.
Таким образом, один из двух процессов получает чтение первым, и он перемещает указатель чтения также и для другого процесса. Поскольку первый процесс читает все данные в файле, второй процесс немедленно получает EOF.
Вы можете открыть файл для чтения после fork()
; по крайней мере, это, вероятно, самый простой способ избежать неприятностей. Кроме того, процессы могут быть перемотаны перед чтением. С одной стороны, это было бы бездействующим, но с другой это имело бы значение. В этом контексте вы могли бы также прочитать перед форком, который заполнил бы буфер для fp1
данными, и оба процесса увидят, что было прочитано. Это, вероятно, считается обманом.