Linux 零拷贝 sendfile函数中文说明及实际操作
Sendfile函數(shù)說明?
#include?
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);?
sendfile()是作用于數(shù)據(jù)拷貝在兩個(gè)文件描述符之間的操作函數(shù).這個(gè)拷貝操作是內(nèi)核中操作的,所以稱為"零拷貝".sendfile函數(shù)比起read和write函數(shù)高效得多,因?yàn)閞ead和write是要把數(shù)據(jù)拷貝到用戶應(yīng)用層操作.?
參數(shù)說明:?
out_fd 是已經(jīng)打開了,用于寫操作(write)的文件描述符;?
in_fd 是已經(jīng)打開了,用于讀操作(read)的文件描述符;?
offset 偏移量;表示sendfile函數(shù)從in_fd中的哪一偏移量開始讀取數(shù)據(jù).如果是零表示從文件的開始讀,否則從相應(yīng)的偏移量讀取.如果是循環(huán)讀取的時(shí)候,下一次offset值應(yīng)為sendfile函數(shù)返回值加上本次的offset的值. offset為傳入傳出參數(shù),在用循環(huán)傳大文件的時(shí)候會自增。
count是在兩個(gè)描述符之間拷貝的字節(jié)數(shù)(bytes)?
返回值:?
如果成功的拷貝,返回寫操作到out_fd的字節(jié)數(shù),錯(cuò)誤返回-1,并相應(yīng)的設(shè)置error信息.?
EAGAIN 無阻塞I/O設(shè)置O_NONBLOCK時(shí),寫操作(write)阻塞了.?
EBADF 輸出或者輸入的文件描述符沒有打開.?
EFAULT 錯(cuò)誤的地址.?
EINVAL 描述符不可用或者鎖定了,或者用mmap()函數(shù)操作的in_fd不可用.?
EIO 當(dāng)讀取(read)in_fd時(shí)發(fā)生未知錯(cuò)誤.?
ENOMEM 讀(read)in_fd時(shí)內(nèi)存不足.
轉(zhuǎn)載于:https://www.cnblogs.com/xintt/p/8724290.html
總結(jié)
以上是生活随笔為你收集整理的Linux 零拷贝 sendfile函数中文说明及实际操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql---mysql查看数据库操作
- 下一篇: linux 其他常用命令