2010-04-30 44 views
3

編程web服務器(C),它應該發送大文件。我的問題是: 兩個系統調用的主要區別是:writesendfilesendfile取決於套接字系統緩衝區的大小?我注意到write通常寫得比我要求的要少。Linux寫入和發送文件之間的區別系統調用

例如,如果得到了一個文件的許多請求:我應該打開它,複製到內存和使用write,或者我可以爲每個客戶端做sendfile

在此先感謝所有答案。

回答

6

請閱讀sendfile(2)。

sendfile()在一個文件描述符和另一個文件描述符之間複製數據。由於這種複製是在內核中完成的,所以sendfile()read(2)和write(2)的組合更高效,這將需要向用戶空間傳輸數據和從用戶空間傳輸數據。

關於返回值的任何write/read/senfile調用不保證數據的整個數據塊寫入/讀取/發送

相關問題