2013-03-13 54 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