Element ma postać:

struct iovec { void *iov_base; size_t iov_len;

gdzie iov_base to adres a iov_len rozmiar bufora.

Procedura naszego serwera miałaby wówczas postać: struct iovec io; io.iov_base = http_headers; io.iov_len = http_headers_size; io.iov_base = file_headers; io.iov_len = file_headers_size; writev (fd, io, 2);

readv i writev pojawiły się po raz pierwszy w systemie 4.2BSD. readv nie jest aż tak istotne jak writev.

sendfile Kolejny często występujący problem wydajności przedstawia następujący fragment kodu: bytes_read = read (fd1, buf, buf_size); write (fd2, buf, bytes_read);

Często występuje konieczność przerzucenia ogromnej ilości danych z jednego deskryptora do drugiego. Jednym problemem jest podwojona liczba wywołań systemowych, ale jeszcze poważniejse jest zupełnie bezużyteczne kopiowanie danych. Przeciwdziałać temu ma zdefiniowany w nagłówku sys/sendfile.h: ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

out_fd to deskryptor wyjściowy, in_fd – wejściowy, offset to wskaźnik na zmienną przechowującą offset w pliku wejściowym, od którego ma zacząć dane wywołanie, a count – ilość danych do przetransferowania.