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:
sendfilepoate trimite mai puțini; repetă până la final.
Comenzi înrudite
os.open(), read(), write(), lseek(), close(), closerange(): Lucrul de nivel jos cu fișierele, prin descriptori numerici, ca în C.shutil.copy(), copy2(), copyfile() și rudele lor: Copiază fișiere: doar conținutul, conținutul cu permisiunile, sau și datele de modificare.