Python Glossary English

Python 3.3+Linux · macOSosфункция

os.sendfile

os — эффективное копирование

Копирует данные между дескрипторами напрямую в ядре, без буфера в пространстве пользователя. Доступно на Unix.

Синтаксис

os.sendfile(...)

Данные не проходят через память Python, поэтому так быстро отдают файлы в сокет — на этом построен socket.sendfile. Может передать не всё запрошенное, возвращает число отправленных байт. Сигнатура и допустимые типы дескрипторов различаются между Linux и macOS, поэтому в переносимом коде удобнее высокоуровневый socket.sendfile.

Примеры

import os
src = os.open('send_src.txt', os.O_RDWR | os.O_CREAT | os.O_TRUNC)   # временный файл-источник
print(os.write(src, b'hello world!'))   # → 12 — подготовили 12 байт данных
dst = os.open('send_dst.txt', os.O_WRONLY | os.O_CREAT | os.O_TRUNC)   # приёмник; на практике сюда подставляют дескриптор сокета
print(os.sendfile(dst, src, 0, 5))   # → 5 — ядро переслало b'hello' с нулевого смещения, минуя память процесса
print(os.sendfile(dst, src, 5, 100))   # → 7 — отправлен остаток файла, count можно брать с запасом
print(os.sendfile(dst, src, 12, 10))   # → 0 — смещение за концом файла, отправлять нечего

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности