Unix 4个文件描述符是否可以指向同一个文件表条目
在各种程序中观察到以下代码序列:Unix 4个文件描述符是否可以指向同一个文件表条目,unix,Unix,在各种程序中观察到以下代码序列: dup2(fd, 0); dup2(fd, 1); dup2(fd, 2); if(fd > 2) close(fd); 我不明白为什么需要if测试。假设fd是3,那么我们只有4个文件描述符0,1,2,3指向文件表中的相同条目。这是个问题吗 我不明白为什么需要if测试。假设fd是3,那么我们只有4个文件描述符0,1,2,3指向文件表中的相同条目。这是个问题吗 假设fd为0、1或2。如果不进行测试,则STDIN、STDOUT或STDERR中的一个将关闭
dup2(fd, 0);
dup2(fd, 1);
dup2(fd, 2);
if(fd > 2)
close(fd);
我不明白为什么需要if测试。假设fd是3,那么我们只有4个文件描述符0,1,2,3指向文件表中的相同条目。这是个问题吗
我不明白为什么需要if测试。假设fd是3,那么我们只有4个文件描述符0,1,2,3指向文件表中的相同条目。这是个问题吗
假设fd为0、1或2。如果不进行测试,则STDIN、STDOUT或STDERR中的一个将关闭。这段代码试图确保IN/OUT/ERR映射到一个已知的文件——可能是指向/dev/null opened O_RDWR的重定向——这样以后的读/写操作就不会受阻于EBADF,更糟糕的是,不会发送到错误的fd
或者假设完全省略了结束语。如果fd为3或更大,则该文件描述符可能泄漏,由子进程继承,即使在exec之前复制了IN/OUT/ERR,从而授予对我们不希望该子进程拥有的资源的访问权
假设fd是3,那么我们只有4个文件描述符0,1,2,3指向文件表中的相同条目。这是个问题吗
也许吧
由于标准流指向打开的文件,因此泄漏文件描述符可能没有问题,因为底层文件描述可能在进程关闭之前不会关闭。这当然是草率的,但实际上不会引起问题
但这有点乐观。也许程序将调用fork和/或exec,或者它将再次重定向标准流。在本例中,我们不仅泄漏了一个文件描述符,还泄漏了一个完整的打开文件。这是一件坏事