fd リーク中に、ファイル記述子の上限に達している間に名前変更呼び出しが失敗したことに気付きました。残念ながらエラーコードはありません。
ファイル記述子の欠如が名前変更の失敗に関連している可能性はありますか?
rename() の実装を見る限り、link() システム コールが使用されています。fdは必要ですか?
使用される名前変更の実装は、\glibc-2.17\sysdeps\posix\ からのものです。
このプログラムをコンパイルしました:
#include <stdio.h>
int main()
{
rename("a", "a1");
}
実行可能ファイルで実行strace
されました。初期化コードが完了すると、次のことが起こります。
rename("a", "a1") = 0
exit_group(0) = ?
open
つまり、新しいファイル記述子へのシステム コールはありません。
の障害モードはrename
、man ページに明確にリストされています。
http://www.manpagez.com/man/2/rename/
開いているファイルが多すぎるという問題については言及されていません。