#include <unistd.h> int sendfile (int out_fd,int in_fd,off_t *offset,size_t count)
Przypomnijmy sobie fragment kodu będącego przykładem wykorzystania SOCK_DGRAM do przesyłania plików:
fd = open (PLIK, O_RDONLY);
...
bzero (buf, sizeof (buf));
while (read (fd, buf, sizeof (buf)) > 0)
{
sendto (sd, buf, strlen (buf), 0, (struct sockaddr *) &caddr, sizeof (caddr));
bzero (buf, sizeof (buf));
}
close (fd);
Dzięki sendfile() można to skrócić do:
off_t offset=0; ... fd = open (PLIK, O_RDONLY); ... sendfile (sd, fd, &offset, lseek(fd, 0, SEEK_END)); close (fd);Trzeba pamiętać, że sendfile() może kopiować tylko do gniazd połączonych (nie mylić z połączeniowymi/strumieniowymi !). Dlatego też należałoby jeszcze we wspomnianym programie dokonać małej korekty, tak aby wykorzystywał on gniazda połączone (oryginalna wersja tego nie robi).