日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 零拷贝 sendfile函数中文说明及实际操作

發(fā)布時(shí)間:2024/1/17 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 零拷贝 sendfile函数中文说明及实际操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)存不足.

off = 0; while((ret = sendfile(new_fd,fd,&off,4096))>0){if(ret == -1){perror("sendfile");}}

  

轉(zhuǎn)載于:https://www.cnblogs.com/xintt/p/8724290.html

總結(jié)

以上是生活随笔為你收集整理的Linux 零拷贝 sendfile函数中文说明及实际操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。