【发布时间】:2010-04-03 06:11:08
【问题描述】:
我正在阅读 DJB 的 "Some thoughts on security after ten years of Qmail 1.0",他列出了这个用于移动文件描述符的函数:
int fd_move(到,从) 诠释为; 来自; { 如果(到 == 从)返回 0; if (fd_copy(to,from) == -1) 返回 -1; 关闭(从); 返回0; }我突然想到这段代码没有检查 close 的返回值,所以我阅读了 close(2) 的手册页,似乎 can 失败并出现EINTR,在在这种情况下,适当的行为似乎是使用相同的参数再次调用 close。
由于这段代码是由在 C 和 UNIX 方面比我有更多经验的人编写的,而且在 qmail 中十多年来一直保持不变,我认为我认为一定有一些细微的差别导致了这段代码正确的。谁能向我解释一下这种细微差别?
【问题讨论】:
-
可能在调用函数 fd_mode 之前检查了“from”
-
以什么方式可以检查“从”以防止从 close(2) 返回 EINTR?