mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
gh-93180: Update os.copy_file_range() documentation (#93182)
This commit is contained in:
parent
2c3fe5eeb2
commit
2dece90808
1 changed files with 17 additions and 3 deletions
|
@ -798,18 +798,32 @@ as internal buffering of data.
|
||||||
Copy *count* bytes from file descriptor *src*, starting from offset
|
Copy *count* bytes from file descriptor *src*, starting from offset
|
||||||
*offset_src*, to file descriptor *dst*, starting from offset *offset_dst*.
|
*offset_src*, to file descriptor *dst*, starting from offset *offset_dst*.
|
||||||
If *offset_src* is None, then *src* is read from the current position;
|
If *offset_src* is None, then *src* is read from the current position;
|
||||||
respectively for *offset_dst*. The files pointed by *src* and *dst*
|
respectively for *offset_dst*.
|
||||||
|
|
||||||
|
In Linux kernel older than 5.3, the files pointed by *src* and *dst*
|
||||||
must reside in the same filesystem, otherwise an :exc:`OSError` is
|
must reside in the same filesystem, otherwise an :exc:`OSError` is
|
||||||
raised with :attr:`~OSError.errno` set to :data:`errno.EXDEV`.
|
raised with :attr:`~OSError.errno` set to :data:`errno.EXDEV`.
|
||||||
|
|
||||||
This copy is done without the additional cost of transferring data
|
This copy is done without the additional cost of transferring data
|
||||||
from the kernel to user space and then back into the kernel. Additionally,
|
from the kernel to user space and then back into the kernel. Additionally,
|
||||||
some filesystems could implement extra optimizations. The copy is done as if
|
some filesystems could implement extra optimizations, such as the use of
|
||||||
both files are opened as binary.
|
reflinks (i.e., two or more inodes that share pointers to the same
|
||||||
|
copy-on-write disk blocks; supported file systems include btrfs and XFS)
|
||||||
|
and server-side copy (in the case of NFS).
|
||||||
|
|
||||||
|
The function copies bytes between two file descriptors. Text options, like
|
||||||
|
the encoding and the line ending, are ignored.
|
||||||
|
|
||||||
The return value is the amount of bytes copied. This could be less than the
|
The return value is the amount of bytes copied. This could be less than the
|
||||||
amount requested.
|
amount requested.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
On Linux, :func:`os.copy_file_range` should not be used for copying a
|
||||||
|
range of a pseudo file from a special filesystem like procfs and sysfs.
|
||||||
|
It will always copy no bytes and return 0 as if the file was empty
|
||||||
|
because of a known Linux kernel issue.
|
||||||
|
|
||||||
.. availability:: Linux kernel >= 4.5 or glibc >= 2.27.
|
.. availability:: Linux kernel >= 4.5 or glibc >= 2.27.
|
||||||
|
|
||||||
.. versionadded:: 3.8
|
.. versionadded:: 3.8
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue