我不明白當文件句柄超出範圍時,Rust如何處理文件句柄。例如,我創建了一個文件,寫幾個字進去:文件句柄超出範圍時如何關閉它?
let wd = os::getcwd().unwrap_or(Path::new("/"));
let mut file = File::create(&Path::new("daemon_log.txt"));
file.write_all(format!("DAEMON CWD: {}", wd.as_str().unwrap_or("some problems")).as_bytes());
在哪裏文件超出範圍的點,編譯器應該插入到可用內存的指令。如果我理解如何阻止IO通常是正確的,那麼除了釋放內存之外,該進程還應釋放一些鎖。
我很擔心的是,在File
的源代碼中,找不到編譯器提示的任何提示。 This old article說所有的魔法都落實到File
的Drop
特徵的實現中,但是現在看起來這不是真的,因爲我在std::ops.rs
和std::old_io::fs.rs
中找不到Drop
特徵實現。
UPDATE
我檢查File
的實現的write_all
再次發現write
方法適用於一些描述符(FileDesc
)。我沒有在文檔中找到任何有關它的信息,所以去了GitHub,找到了this。它看起來像回答我的問題,但我在註釋一行困惑:
//關閉標準輸入輸出文件句柄是沒有意義的,所以不要做
這是什麼意思?我不應該在我自己的fd上調用libc::close
?或者他們自己不確定應該如何實施?
這似乎是有效的答案。謝謝 :) – mkrakhin 2015-02-24 13:04:04