os.sendfile() în Python

Descriptori de fișiere (os) Python 3.3+ (Unix)

Copiază date dintr-un fișier direct într-un socket, în nucleul sistemului, fără a trece prin Python.

Sintaxă
os.sendfile(fd_iesire, fd_intrare, pozitie, numar)

Ce face os.sendfile()

sendfile() trimite numar octeți din fișierul fd_intrare, începând de la pozitie, către fd_iesire, fără copiere prin memoria programului. Este folosit de servere web pentru trimiterea rapidă a fișierelor. Pe macOS, destinația trebuie să fie un socket; pe Linux poate fi și un fișier. socket.sendfile() este varianta de nivel înalt.

Parametri

Parametru Descriere
fd_iesire, fd_intrare Destinația (socket) și sursa (fișier).
pozitie, numar De unde și câți octeți.

Ce returnează

Numărul de octeți trimiși.

Exemple

Exemplul 1: Trimiterea unui fișier printr-un socket

import os, socket
with open("pagina.html", "w") as f:
    f.write("<h1>Salut</h1>")
a, b = socket.socketpair()
with open("pagina.html", "rb") as f:
    trimis = os.sendfile(a.fileno(), f.fileno(), 0, 100)
print(trimis, b.recv(100))
a.close(); b.close()

Rezultat

14 b'<h1>Salut</h1>'

Greșeli frecvente

  • Presupui că toți octeții au fost trimiși dintr-un apel: sendfile poate trimite mai puțini; repetă până la final.

Comenzi înrudite