我注意到,在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