dup2(fd, 0); // 標準輸入 → fd
dup2(fd, 1); // 標準輸出 → fd
dup2(fd, 2); // 標準錯誤 → fd
if (fd > 2) close(fd);
fd(如開啟的日誌文件/管道/ socket)。fd 指向的同一個「打開文件表項」。fd(通常為 3+)成為多餘別名,指向同一文件表項。保留會洩漏描述符,佔用進程限額(預設 1024),且可能干擾後續 open() 分配最小可用編號。同一文件表項可被無數描述符指向,無「最多 3 個」限制。dup2(fd, 2) 成功證明第 4 個描述符(2)已指向該表項。關閉 fd 僅為資源整潔,非技術強制。
int fd = open("/dev/null", O_RDWR);
dup2(fd, 0); dup2(fd, 1); dup2(fd, 2);
if (fd > 2) close(fd); // 標準流已指向 /dev/null,fd 無用
此為守護進程脫離終端的標準做法。