我不明白当文件句柄超出范围时,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