我注意到在fd泄漏期间,当达到文件描述符的上限时,重命名调用失败。不幸的是,我没有错误代码。
缺少文件描述符是否可能与重命名失败有关?
据我所知,rename()的实现中使用了link()系统调用。它需要fd吗?
使用的rename的实现来自glibc-2.17sysdepsposix
我编译了这个程序:
#include <stdio.h>
int main()
{
rename("a", "a1");
}
并在可执行文件上运行strace
。一旦初始化代码完成,所发生的就是:
rename("a", "a1") = 0
exit_group(0) = ?
。没有系统调用open
新文件描述符
手册页明确列出了rename
的失效模式:
它没有提到打开太多文件是一个问题