1. 程式人生 > >Linux的高效傳輸函式sendfile

Linux的高效傳輸函式sendfile

參考手冊:http://man7.org/linux/man-pages/man2/sendfile.2.html

函式原型:

#include <sys/sendfile.h>
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

out_fd是需要輸出資料的fd;in_fd是需要獲取資料的fd;offset是拷貝資料的起始點,如果是NULL,則從頭開始拷貝;count是拷貝的位元數。

這是在核心中進行轉換,不用進入使用者態,因此效率非常高。

程式碼例項:

#include
<stdio.h>
#include <stdlib.h> #include <string.h> #include <sys/sendfile.h> #include <unistd.h> #include <fcntl.h> int main(int argc, char* argv[]) { if (argc != 4) { perror("usage: %s <src file> <dst file> <length of data>\n"); return
-1; } int len = atoi(argv[3]); if (len < 0) { perror("length error\n"); return -1; } int readfd = open(argv[1], O_RDONLY); if (readfd < 0) { perror("open read fd failed\n"); return -1; } int writefd = open(argv[2], O_WRONLY | O_CREAT); if (writefd < 0) {
perror("open write fd failed\n"); return -1; } if (sendfile(writefd, readfd, NULL, len) < 0) { perror("sendfile() error\n"); return -1; } close(writefd); close(readfd); return 0; }