Я написал демона TCP, который принимает подключения клиентов к данному порту и после этого выполняет команду с использованием execv (3). В каждом учебном пособии по написанию демонов упоминается, что он закрывает stdin, stdout, stderr, чтобы успешно демонировать процесс.daemon: closed stderr и accept (2)
Однако я обнаружил, что accept (2) повторно использует номера дескрипторов файла уже закрытых stdout/stderr, поэтому после вызова fork (2) и execv (3) дочерний процесс записывает вывод в сокет просто потому, что stdout/stderr сопоставляется файлу дескриптор теперь связан с клиентским сокетом.
Любые идеи, как я могу избежать этого, не прибегая к перенаправлению вывода оболочки?