On macOS `fcopyfile`_ is used to copy the file content (not metadata).
-On Linux :func:`os.sendfile` is used.
+On Linux and Solaris :func:`os.sendfile` is used.
On Windows :func:`shutil.copyfile` uses a bigger default buffer size (1 MiB
instead of 64 KiB) and a :func:`memoryview`-based variant of
.. versionchanged:: 3.8
+.. versionchanged:: 3.14
+ Solaris now uses :func:`os.sendfile`.
+
.. _shutil-copytree-example:
copytree example
# This should never be removed, see rationale in:
# https://bugs.python.org/issue43743#msg393429
_USE_CP_SENDFILE = (hasattr(os, "sendfile")
- and sys.platform.startswith(("linux", "android")))
+ and sys.platform.startswith(("linux", "android", "solaris")))
_HAS_FCOPYFILE = posix and hasattr(posix, "_fcopyfile") # macOS
# CMD defaults in Windows 10
def _fastcopy_sendfile(fsrc, fdst):
"""Copy data from one regular mmap-like fd to another by using
high-performance sendfile(2) syscall.
- This should work on Linux >= 2.6.33 only.
+ This should work on Linux >= 2.6.33, Android and Solaris.
"""
# Note: copyfileobj() is left alone in order to not introduce any
# unexpected breakage. Possible risks by using zero-copy calls
return dst
except _GiveupOnFastCopy:
pass
- # Linux
+ # Linux / Android / Solaris
elif _USE_CP_SENDFILE:
try:
_fastcopy_sendfile(fsrc, fdst)