4 ms·
Where can I learn more about this? This seems very uninutive to me, as I'm learning Rust myself.
by rirze 3y ago
Where can I learn more about this? This seems very uninutive to me, as I'm learning Rust myself.
- cyphar 3y agoI'm not sure if there is a document that mentions this in particular, but it is a consequence of how lifetimes work. The core issue is that .as_raw_fd() takes &File and returns an integer (which doesn't have lifetime information). As a result, the File is dropped at the end of the statement and thus the number you got from .as_raw_fd() is invalidated. This does happen elsewhere in Rust, but often when you have methods on &self that return something you use later, the method returns something with the same lifetime (fn foo(&'a self) -> Foo<&'a>) and thus the original object will be kept alive until the end of the scope. It just so happens that file descriptors are tied to the lifetime of the File in a way that Rust cannot express nor detect. I don't know if clippy has a warning for this particular case. It might be useful to add it.