После dup2()
, child_map[0]
и STDIN_FILENO
по-прежнему будут отдельными файловыми дескрипторами , но они будут ссылаться на то же самое описание открытого файла .Это означает, что если, например, child_map[0] == 5
и STDIN_FILENO == 0
, то оба дескриптора файла 5
и 0
останутся открытыми после dup2()
.
Ссылка на одно и то же средство описания открытого файлачто файловые дескрипторы являются взаимозаменяемыми - они имеют общие атрибуты, такие как текущее смещение файла.Если вы выполните lseek()
для одного дескриптора файла, текущее смещение файла будет изменено для обоих.
Чтобы закрыть описание открытого файла, все дескрипторы файлов , которые указывают на него, должны быть закрыты..
Обычно после dup2()
выполняется close(child_map[0])
, что оставляет открытым только один дескриптор файла.