Книга: Программирование для 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()
эта операция существенно ускоряется.
- Резервное копирование базы данных InterBase
- Резервное копирование многофайловых баз данных
- Резервное копирование при работе InterBase в режиме 24x7
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Повышение производительности приложений с помощью хранимых процедур
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- Организация пользователей в группы с помощью ролей
- Эффективная работа с временными файлами сортировки
- Аргументы функции в Python
- 3. Функции
- Новые функции API для работы с Blob и массивами
- Единое имя файла параметров InterBase