Wywołanie zwraca ilość rzeczywiście zapisanych danych i poprawia offset na nową wartość.

sendfile nie stosuje zwyczajnych metod przesuwania offsetu dla pliku wejściowego, co umożliwia używanie jednego deskryptora do wielu takich operacji jednocześnie. Np. serwer HTTP może wysyłać ten sam plik przez kilka połączeń naraz i dzięki temu rozwiązaniu nie musi wielokrotnie duplikować deskryptora, a po ich rozłączeniu wielokrotnie go zamykać.

Offset pliku wyjściowego jest poprawiany normalnie – wysyłanie jednocześnie kilku plików na ten sam deskryptor nie miałoby większego sensu (sekwencyjnemu wysyłaniu oczywiście to nie przeszkadza).

sendfile taki jak tu pokazany pojawił się w Linuksie 2.2, jednak wywołania o podobnym działaniu istnieją również w innych systemach.

Przykład działania: #include <sys/sendfile.h> #include <unistd.h> #include <fcntl.h> #include <stdio.h>

int main(int argc, char **argv) { off_t ofs=0; int in, out;

if (argc < 3)

fprintf (stderr, "Usage: %s <infile> <outfile>\n", argv); return 1;

in = open (argv, O_RDONLY); if (in == -1)

fprintf (stderr, "Can't open %s\n", argv); return 1;

out = open (argv, O_WRONLY|O_CREAT, 0666); if (out == -1)

fprintf (stderr, "Can't open %s\n", argv); return 1;

while (sendfile(out, in, &ofs, 64*1024*1024) > 0); return 0; }