Ответ - да, и да (то же самое относится ко всем дескрипторам файлов, включая такие вещи, как сокеты).
При вызове fork()
дочерний элемент получает собственную отдельную копию каждого дескриптора файла, каждый акт, как будто он был создан dup()
. A close()
закрывает только определенный дескриптор файла, который был передан - так, например, если вы делаете n2 = dup(n); close(n);
, файл (канал, сокет, устройство ...), на который ссылался n
, остается открытым - то же самое относится к файловые дескрипторы дублируются fork()
.