Книга: Программирование для Linux. Профессиональный подход

Листинг 8.10. (сору.с) Копирование файла с помощью функции sendfile()

Листинг 8.10. (сору.с) Копирование файла с помощью функции sendfile()

#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/sendfile.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char* argv[]) {
 int read_fd;
 int write_fd;
 struct stat stat_buf;
 off_t offset = 0;
 /* Открытие входного файла. */
 read_fd = open(argv[1], O_RDONLY);
 /* Определение размера входного файла. */
 fstat(read_fd, &stat_buf);
 /* Открытие выходного файла для записи. */
 write_fd =
  open(argv[2], O_WRONLY | O_CREAT, stat_buf.st_mode);
 /* Передача данных из одного файла в другой. */
 sendfile(write_fd, read_fd, &offset, stat_buf.st_size);
 /* Закрытие файлов. */
 close(read_fd);
 close(write_fd);
 return 0;
}

Функция sendfile() часто используется для повышения эффективности копирования. Она широко применяется Web-серверами и сетевыми демонами, предоставляющими файлы по сети клиентским программам. Запрос обычно поступает через сокет. Серверная программа открывает локальный дисковый файл, извлекает из него данные и записывает их в сокет. Благодаря функции sendfile() эта операция существенно ускоряется.

Оглавление книги


Генерация: 1.855. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз