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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

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

Sendfile函數說明?
#include?
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);?

sendfile()是作用于數據拷貝在兩個文件描述符之間的操作函數.這個拷貝操作是內核中操作的,所以稱為"零拷貝".sendfile函數比起read和write函數高效得多,因為read和write是要把數據拷貝到用戶應用層操作.?

參數說明:?
out_fd 是已經打開了,用于寫操作(write)的文件描述符;?
in_fd 是已經打開了,用于讀操作(read)的文件描述符;?
offset 偏移量;表示sendfile函數從in_fd中的哪一偏移量開始讀取數據.如果是零表示從文件的開始讀,否則從相應的偏移量讀取.如果是循環讀取的時候,下一次offset值應為sendfile函數返回值加上本次的offset的值. offset為傳入傳出參數,在用循環傳大文件的時候會自增。
count是在兩個描述符之間拷貝的字節數(bytes)?

返回值:?
如果成功的拷貝,返回寫操作到out_fd的字節數,錯誤返回-1,并相應的設置error信息.?

EAGAIN 無阻塞I/O設置O_NONBLOCK時,寫操作(write)阻塞了.?
EBADF 輸出或者輸入的文件描述符沒有打開.?
EFAULT 錯誤的地址.?
EINVAL 描述符不可用或者鎖定了,或者用mmap()函數操作的in_fd不可用.?
EIO 當讀取(read)in_fd時發生未知錯誤.?
ENOMEM 讀(read)in_fd時內存不足.

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

  

轉載于:https://www.cnblogs.com/xintt/p/8724290.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。