我注意到,在fd泄漏期间,达到文件描述符的上限时,重命名调用失败。不幸的是,我没有错误代码。如果文件描述符不够,可以重命名失败?
缺少文件描述符是否可能与重命名失败有关?
据我可以看到在执行rename()一个链接()系统调用被使用。它需要fd吗?
重命名所使用的实现是由\的glibc-2.17 \ sysdeps \ POSIX \
我注意到,在fd泄漏期间,达到文件描述符的上限时,重命名调用失败。不幸的是,我没有错误代码。如果文件描述符不够,可以重命名失败?
缺少文件描述符是否可能与重命名失败有关?
据我可以看到在执行rename()一个链接()系统调用被使用。它需要fd吗?
重命名所使用的实现是由\的glibc-2.17 \ sysdeps \ POSIX \
我编译此程序:
#include <stdio.h>
int main()
{
rename("a", "a1");
}
和可执行跑strace
。一旦初始化代码完成后,所发生的一切是:
rename("a", "a1") = 0
exit_group(0) = ?
即没有系统调用open
新的文件描述符。
确实重命名不使用任何fd。间接地,问题是由于缺少描述符而导致的,因为没有创建要重命名的文件。 – George 2013-03-18 10:46:33
重命名失败的错误是什么? – Mat 2013-03-13 10:02:19
编号重命名是一个系统调用,不会混淆你的文件描述符;并且系统调用是原子的,因此重命名可能会失败。 BTW:重命名是一个目录操作;内核需要一个打开的目录的inode。 – wildplasser 2013-03-13 10:03:57
它不幸被保存。 – George 2013-03-13 10:04:39