2013-03-13 53 views
2

我注意到,在fd泄漏期间,达到文件描述符的上限时,重命名调用失败。不幸的是,我没有错误代码。如果文件描述符不够,可以重命名失败?

缺少文件描述符是否可能与重命名失败有关?

据我可以看到在执行rename()一个链接()系统调用被使用。它需要fd吗?

重命名所使用的实现是由\的glibc-2.17 \ sysdeps \ POSIX \

+0

重命名失败的错误是什么? – Mat 2013-03-13 10:02:19

+1

编号重命名是一个系统调用,不会混淆你的文件描述符;并且系统调用是原子的,因此重命名可能会失败。 BTW:重命名是一个目录操作;内核需要一个打开的目录的inode。 – wildplasser 2013-03-13 10:03:57

+0

它不幸被保存。 – George 2013-03-13 10:04:39

回答

2

我编译此程序:

#include <stdio.h> 

int main() 
{ 
    rename("a", "a1"); 
} 

和可执行跑strace。一旦初始化代码完成后,所发生的一切是:

rename("a", "a1")      = 0 
exit_group(0)       = ? 

即没有系统调用open新的文件描述符。

+0

确实重命名不使用任何fd。间接地,问题是由于缺少描述符而导致的,因为没有创建要重命名的文件。 – George 2013-03-18 10:46:33