sendfile()
có thể được sử dụng để truyền dữ liệu từ bộ mô tả "tệp" đến bộ mô tả "socket" để lấy dữ liệu từ máy A đến máy B. Có thể lấy dữ liệu tại đầu nhận từ bộ mô tả "socket" đến một tệp có ngữ nghĩa không sao chép tương tự? Tôi nghĩ rằng sendfile()
không giúp đỡ ở đây vì sendfile()
cần nguồn dữ liệu là bộ đệm "trang/bộ đệm". Tôi hiểu có đúng không? Có thể giúp splice()
trong tình huống này không?Tìm hiểu về sendfile() và splice()
6
A
Trả lời
11
Bạn chính xác về giới hạn của sendfile
cho việc này. Và có, splice
có thể giúp, nhưng nó không tầm thường: splice
yêu cầu ít nhất một trong các bộ mô tả tệp nguồn hoặc đích là một đường ống. Vì vậy, bạn không thể trực tiếp splice
từ một ổ cắm đến một bộ mô tả tệp đơn giản.
Về mặt lý thuyết, những gì bạn có thể làm để làm cho nó hoạt là:
- thiết lập ổ cắm fd trong nước và đầu ra tập tin fd của bạn như bạn sẽ thường
- tạo ra một đường ống với
pipe(2)
- trong một vòng lặp :
- đọc từ ổ cắm sang bên ghi của ống với
splice
- ghi từ phía đọc của ống để th tập tin e với
splice
cũng
- đọc từ ổ cắm sang bên ghi của ống với
Lặp lại các bước cuối cùng cho đến khi tất cả các dữ liệu được đọc.
Zero-Copy in Linux with sendfile() and splice() có triển khai kỹ thuật này.
Các vấn đề liên quan
- 1. PHP - Cách tìm hiểu xem X-Sendfile có sẵn và cài đặt không?
- 2. Tìm hiểu về os.fork và Queue.Queue
- 3. Tìm hiểu về Java bytecode và JVM
- 4. Tìm hiểu về goroutines
- 5. Tìm hiểu về Traceview
- 6. Tìm hiểu về Silverlight Dispatcher
- 7. js. splice trả về mục bị loại bỏ?
- 8. Tìm hiểu về BaseAdapters và cách sử dụng chúng
- 9. Tìm hiểu về TransactionScopeOptions: RequiresNew = Suppress + Required?
- 10. Tìm hiểu về tham chiếu assembly csproj
- 11. Tìm hiểu về Linux/proc/id/maps
- 12. Tìm hiểu về bộ lập lịch linux
- 13. Tìm hiểu về tương lai/luồng
- 14. Tìm hiểu về thiết lập/getockopt SO_SNDBUF
- 15. Tìm hiểu về Pickling bằng Python
- 16. Tìm hiểu GEB và Spock
- 17. Tìm hiểu về cấu trúc cây tìm kiếm nhị phân
- 18. Tìm kiếm đầu tiên về chiều sâu và chiều rộng Tìm hiểu đầu tiên
- 19. Cần hiểu về spring.handlers và spring.schemas
- 20. sendfile không sao chép nội dung tệp
- 21. Tìm hiểu thêm về phân tích cú pháp
- 22. Tìm hiểu về chi phí đối tượng trong JVM
- 23. Tìm hiểu về nội bộ của Mercurial, Bazaar, v.v ...?
- 24. Tìm hiểu về các thư viện trong OCaml
- 25. Tìm hiểu về các chủ đề daemon Python
- 26. Tìm hiểu về Ruby on Rails hiển thị số lần
- 27. Làm cách nào để tìm hiểu về mã nguồn GNU?
- 28. Tìm hiểu về độ phân giải của iPhone
- 29. Tìm hiểu thêm về điện toán phân tán
- 30. Tìm hiểu về phong cách lập trình Mozart của Dijkstra
Vì 2.6.33 out_fd cho tệp gửi có thể là bất kỳ bộ mô tả tệp nào (không chỉ ổ cắm). – ldrg
kể từ 4,2 tương tự với 'splice()' – technosaurus