2011-03-23 44 views
0

sendfile的問題是無法使用文件fds複製兩個文本文件。 錯誤是EINVAL。 //描述符無效或鎖定,或類似mmap()的操作不適用於in_fd。sendfile()無法複製普通文本文件

這是什麼意思?

從sendfile(man sendfile)的手冊頁中,我找到了這條語句。不知道它是否可以複製兩個普通文件。 (Linux 2.6.9):in_fd,必須對應一個支持類mmap()操作的文件(即它不能是套接字);並且 out_fd必須引用一個套接字。

Applications may wish to fall back to read(2)/write(2) in the case where sendfile() fails with EINVAL or ENOSYS. 

回答

1

sendfile()背後的想法是快速通過套接字發送文件(思考web服務器)。普通文件可以是mmap() ed,但不是套接字,因此當您將它作爲目標文件傳送到常規文件時,它會炸燬。

+0

手冊頁如果sendfile也提示相同。現在我正在使用std。 C++的方式。 ofstream << ifstream.rdbuf()。有沒有更好的方法,即使它是特定於Linux的? – siddhusingh 2011-03-25 05:31:48

+0

不是。這通常不是操作系統提供「在此複製此文件」系統調用的地方。 – geekosaur 2011-03-25 05:38:05