Как правильно использовать sendfile()?

100
17 февраля 2022, 14:10

Узнал о вызову senfile(), прочитал про него на man(https://www.opennet.ru/man.shtml?topic=sendfile&category=2&russian=0). Но так и не могу понять, как им пользоваться и что в него передавать. Если брать в качестве примера сервер, то первым аргументом будет серверный сокет, вторым клиентский, а 3 и 4?

как им можно заменить способ, где везде используются send и write? Вот пример :

        if ( (fd=open(path, O_RDONLY))!=-1 )    //FILE FOUND
        {
            static const char hdr[]=
                "HTTP/1.0 200 OK\r\n"
                "Connection: keep-alive\r\n"
                "Keep-Alive: timeout=5, max=1000\r\n";
            send(clients[n], hdr , sizeof(hdr)-1, 0);
            size_t f_sz = fd_size(fd);
            printf("%lu\n",f_sz);
            sprintf (data_to_send, "Content-length: %lu\r\n", f_sz);
            write (clients[n], data_to_send, strlen(data_to_send));
            send(clients[n], "\r\n" , 2, 0);
            while ( (bytes_read=read(fd, data_to_send, BYTES))>0 )
            {
                write (clients[n], data_to_send, bytes_read);
            }
        }
Answer 1
#include <sys/sendfile.h>
ssize_t sendfile( int out_fd, 
                  int in_fd,
                  off_t *offset,
                  size_t count)

первый аргумент - дескриптор открытый для записи (туда пишем),
второй - дескриптор для чтения (оттуда читаем),
третий - смещение откуда нужно начать читать
четвертый - количество данных для передачи.

[источник](man 2 sendfile)

READ ALSO
Не работает проверка на ответ пользователя

Не работает проверка на ответ пользователя

У меня есть кодВычисление среднего значения вектора (отрицательные элементы)

107
Как узнать пересекаются ли поверхности в SDL?

Как узнать пересекаются ли поверхности в SDL?

Я делаю игру, и мне нужно, чтобы один игровой объект не накладывался на другойЕсть ли функция в SDL, позволяющая определить пересечение поверхностей...

79
Автогенерация кода в Qt

Автогенерация кода в Qt

QtCreator поддерживает разработку диаграмм конечных автоматов и UML-диаграммНо я никак не могу найти информацию, можно ли эти диаграммы использовать...

92
Почему std::plus не является вызываемым?

Почему std::plus не является вызываемым?

Почему std::plus<int> не является вызываемым?

95