@@ -482,20 +482,42 @@ impl File {
482
482
self . inner . file_attr ( ) . map ( Metadata )
483
483
}
484
484
485
- /// Creates a new independently owned handle to the underlying file.
486
- ///
487
- /// The returned `File` is a reference to the same state that this object
488
- /// references. Both handles will read and write with the same cursor
489
- /// position.
485
+ /// Create a new `File` instance that shares the same underlying file handle
486
+ /// as the existing `File` instance. Reads, writes, and seeks will affect
487
+ /// both `File` instances simultaneously.
490
488
///
491
489
/// # Examples
492
490
///
491
+ /// Create two handles for a file named `foo.txt`:
492
+ ///
493
493
/// ```no_run
494
494
/// use std::fs::File;
495
495
///
496
496
/// # fn foo() -> std::io::Result<()> {
497
- /// let mut f = File::open("foo.txt")?;
498
- /// let file_copy = f.try_clone()?;
497
+ /// let mut file = File::open("foo.txt")?;
498
+ /// let file_copy = file.try_clone()?;
499
+ /// # Ok(())
500
+ /// # }
501
+ /// ```
502
+ ///
503
+ /// Assuming there’s a file named `foo.txt` with contents `abcdef\n`, create
504
+ /// two handles, seek one of them, and read the remaining bytes from the
505
+ /// other handle:
506
+ ///
507
+ /// ```no_run
508
+ /// use std::fs::File;
509
+ /// use std::io::SeekFrom;
510
+ /// use std::io::prelude::*;
511
+ ///
512
+ /// # fn foo() -> std::io::Result<()> {
513
+ /// let mut file = File::open("foo.txt")?;
514
+ /// let mut file_copy = file.try_clone()?;
515
+ ///
516
+ /// file.seek(SeekFrom::Start(3))?;
517
+ ///
518
+ /// let mut contents = vec![];
519
+ /// file_copy.read_to_end(&mut contents)?;
520
+ /// assert_eq!(contents, b"def\n");
499
521
/// # Ok(())
500
522
/// # }
501
523
/// ```
0 commit comments