sendfile()
se puede utilizar para transmitir datos de un descriptor de "archivo" a un descriptor de "zócalo" para obtener datos de la máquina A a la máquina B. ¿Es posible obtener los datos en el extremo receptor desde el descriptor de "socket" a un archivo con semántica de copia cero similar? Creo que sendfile()
no ayuda aquí porque sendfile()
necesita que la fuente de datos sea el caché "page/buffer". Es mi entendimiento correcto? ¿Puede splice()
ayudar en esta situación?Entender sendfile() y empalme()
6
A
Respuesta
11
estás en lo correcto acerca de la limitación de sendfile
para esto. Y sí, splice
puede ayudar, pero no es trivial: splice
requiere que al menos uno de los descriptores de archivos de origen o destino sea un conducto. Por lo tanto, no puede directamente splice
desde un socket a un descriptor de archivo simple.
Conceptualmente, lo que puede hacer para que funcione es:
- configurar su fd toma de entrada y de su archivo fd de salida como lo haría normalmente
- crear un tubo con
pipe(2)
- en un bucle :
- lectura de la toma de la parte de escritura de la tubería con
splice
- escritura desde el lado de lectura de la tubería a tH archivo electrónico con
splice
también
- lectura de la toma de la parte de escritura de la tubería con
Repita los últimos pasos hasta que se lee todos los datos.
Zero-Copy in Linux with sendfile() and splice() tiene una implementación de esta técnica.
Cuestiones relacionadas
- 1. Django - Comprensión de X-Sendfile
- 2. Empalme en colecciones
- 3. Uso de X-Sendfile con Apache/PHP
- 4. Complejidad de std :: list :: empalme y otros contenedores de lista
- 5. Descripción de Array :: empalme en ActionScript 3
- 6. PHP - ¿Cómo saber si X-Sendfile está disponible e instalado?
- 7. Una pregunta sobre la rebanada de empalme y métodos de JavaScript
- 8. Entender los fundamentos de JSONP y rieles
- 9. ¿Entender las fábricas y debería usarlas?
- 10. Ayúdame a entender WebDAV y Autoversioning
- 11. Entender Oracle Apex_Application.G_Fnn y cómo usarlo
- 12. Entender la palabra clave yield y LINQ
- 13. Entender Deferred.pipe()
- 14. Entender AJAX
- 15. Entender boundCenterBottom()
- 16. ayuda a entender macro
- 17. Problema al entender CGPathAddArc
- 18. Entender árboles en ANTLR
- 19. Entender objetos en Python
- 20. Empalme una matriz por la mitad, sin importar el tamaño?
- 21. empalme() en std :: list e invalidación de iterador
- 22. ¿Cómo entender esta definición
- 23. No puedo entender node.js
- 24. ¿Hay algún problema en Perl 5.12.2 usando empalme en @ISA?
- 25. ayuda para entender magic_quotes_gpc()
- 26. Ayuda Entender Enumerable.Join Método
- 27. Empalme de una matriz indexada de cadena en JavaScript
- 28. Javascript: ¿Cuál es el rendimiento algorítmico de 'empalme'?
- 29. matriz de empalme lanza de error en el IE
- 30. Javascript "shift" versus "empalme" - ¿son estas declaraciones iguales?
Desde el 2.6.33 out_fd para sendfile puede ser cualquier descriptor de archivo (no sólo enchufes). – ldrg
desde 4.2 lo mismo aplica para 'empalme()' – technosaurus