diff options
| author | Corey Farwell <coreyf@rwell.org> | 2018-02-01 23:36:33 -0500 |
|---|---|---|
| committer | Corey Farwell <coreyf@rwell.org> | 2018-02-03 11:50:48 -0500 |
| commit | d597da32672805644b6dc76cfffeca6b8c4d8e62 (patch) | |
| tree | d0601e38873b5922afd2dd789f8c8b54091407aa /src/libstd | |
| parent | 8ccab7eed5f4fc93500fbf242e575073ca70d7cb (diff) | |
| download | rust-d597da32672805644b6dc76cfffeca6b8c4d8e62.tar.gz rust-d597da32672805644b6dc76cfffeca6b8c4d8e62.zip | |
Clarify shared file handler behavior of File::try_clone.
Fixes https://github.com/rust-lang/rust/issues/46578.
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/fs.rs | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/src/libstd/fs.rs b/src/libstd/fs.rs index d1f3ccbd2c6..594c9d0ff5a 100644 --- a/src/libstd/fs.rs +++ b/src/libstd/fs.rs @@ -482,20 +482,42 @@ impl File { self.inner.file_attr().map(Metadata) } - /// Creates a new independently owned handle to the underlying file. - /// - /// The returned `File` is a reference to the same state that this object - /// references. Both handles will read and write with the same cursor - /// position. + /// Create a new `File` instance that shares the same underlying file handle + /// as the existing `File` instance. Reads, writes, and seeks will affect + /// both `File` instances simultaneously. /// /// # Examples /// + /// Create two handles for a file named `foo.txt`: + /// /// ```no_run /// use std::fs::File; /// /// # fn foo() -> std::io::Result<()> { - /// let mut f = File::open("foo.txt")?; - /// let file_copy = f.try_clone()?; + /// let mut file = File::open("foo.txt")?; + /// let file_copy = file.try_clone()?; + /// # Ok(()) + /// # } + /// ``` + /// + /// Assuming there’s a file named `foo.txt` with contents `abcdef\n`, create + /// two handles, seek one of them, and read the remaining bytes from the + /// other handle: + /// + /// ```no_run + /// use std::fs::File; + /// use std::io::SeekFrom; + /// use std::io::prelude::*; + /// + /// # fn foo() -> std::io::Result<()> { + /// let mut file = File::open("foo.txt")?; + /// let mut file_copy = file.try_clone()?; + /// + /// file.seek(SeekFrom::Start(3))?; + /// + /// let mut contents = vec![]; + /// file_copy.read_to_end(&mut contents)?; + /// assert_eq!(contents, b"def\n"); /// # Ok(()) /// # } /// ``` |
