.\" -*- coding: UTF-8 -*-
.\" SPDX-License-Identifier: Linux-man-pages-1-para
.\"
.\" This man page is Copyright (C) 1998 Pawel Krawczyk.
.\"
.\" $Id: sendfile.2,v 1.5 1999/05/18 11:54:11 freitag Exp $
.\" 2000-11-19 bert hubert <ahu@ds9a.nl>: in_fd cannot be socket
.\"
.\" 2004-12-17, mtk
.\"	updated description of in_fd and out_fd for 2.6
.\"	Various wording and formatting changes
.\"
.\" 2005-03-31 Martin Pool <mbp@sourcefrog.net> mmap() improvements
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH sendfile 2 "2 maja 2024 r." "Linux man\-pages 6.9.1" 
.SH NAZWA
sendfile \- przesyła dane pomiędzy deskryptorami plików
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <sys/sendfile.h>\fP
.P
.\" The below is too ugly. Comments about glibc versions belong
.\" in the notes, not in the header.
.\"
.\" .B #include <features.h>
.\" .B #if (__GLIBC__==2 && __GLIBC_MINOR__>=1) || __GLIBC__>2
.\" .B #include <sys/sendfile.h>
.\" #else
.\" .B #include <sys/types.h>
.\" .B /* No system prototype before glibc 2.1. */
.\" .BI "ssize_t sendfile(int" " out_fd" ", int" " in_fd" ", off_t *" \
.\"                       offset ", size_t" " count" )
.\" .B #endif
.\"
\fBssize_t sendfile(int\fP\fI out_fd\fP\fB, int\fP\fI in_fd\fP\fB, off_t *_Nullable \fP\fIoffset\fP\fB,\fP
\fB                 size_t\fP\fI count\fP\fB);\fP
.fi
.SH OPIS
\fBsendfile\fP() kopiuje dane pomiędzy dwoma deskryptorami plików. Kopiowanie
odbywa się wewnątrz jądra, dlatego \fBsendfile\fP() jest wydajniejsze niż
połączenie \fBread\fP(2) z \fBwrite\fP(2), które wymagałoby przesłania danych do i
z przestrzeni użytkownika.
.P
\fIin_fd\fP powinien być deskryptorem pliku otwartym do odczytu, a \fIout_fd\fP
powinien być deskryptorem otwartym do zapisu.
.P
Jeśli \fIoffset\fP nie wynosi NULL, to wskazuje on na zmienną przechowującą
przesunięcie pliku, od którego \fBsendfile\fP() zacznie odczytywać dane z
\fIin_fd\fP. Gdy \fBsendfile\fP() powróci, zmienna ta zostanie ustawiona na
przesunięcie bajtu, który następuje po ostatnim odczytanym bajcie. Jeśli
\fIoffset\fP nie wynosi NULL, to \fBsendfile\fP() nie modyfikuje przesunięcia
pliku \fIin_fd\fP; w innym przypadku przesunięcie pliku jest dostosowywane, aby
uwzględnić liczbę bajtów odczytanych z \fIin_fd\fP.
.P
Jeśli \fIoffset\fP wynosi NULL, to dane będą odczytane z \fIin_fd\fP, począwszy od
przesunięcia pliku, a przesunięcie pliku zostanie zaktualizowane przez to
wywołanie.
.P
\fIcount\fP jest liczbą bajtów do skopiowania pomiędzy deskryptorami plików.
.P
.\" commit b964bf53e540262f2d12672b3cca10842c0172e7
Argument \fIin_fd\fP musi odnosić się do pliku obsługującego operacje w stylu
\fBmmap\fP(2) (tj. nie może być gniazdem). Od Linuksa 5.12 nie dotyczy to
sytuacji, gdy \fIout_fd\fP jest potokiem; wówczas \fBsendfile\fP() upraszcza się
do \fBsplice\fP(2) i stosują się jego ograniczenia.
.P
Przed Linuksem 2.6.33, \fIout_fd\fP musiał odnosić się do gniazda. Od Linuksa
2.6.33 może być to dowolny plik. Jeśli jest przewijalny, to \fBsendfile\fP()
odpowiednio dostosowuje przesunięcie pliku.
.SH "WARTOŚĆ ZWRACANA"
Jeśli przesłanie się powiodło, zwracana jest liczba bajtów zapisanych do
\fIout_fd\fP. Proszę zauważyć, że pomyślne wywołanie do \fBsendfile\fP() może
zapisać mniej bajtów niż zażądano; wywołujący powinien być przygotowany na
ponowienie wywołania, jeśli wystąpiły niewysłane bajty. Zob. też UWAGI.
.P
W razie wystąpienia błędu zwracane jest \-1 i ustawiane \fIerrno\fP wskazując
błąd.
.SH BŁĘDY
.TP 
\fBEAGAIN\fP
Wybrano nieblokujące wejście/wyjście za pomocą \fBO_NONBLOCK\fP, a zapis
zablokowałby.
.TP 
\fBEBADF\fP
Plik wejściowy nie został otwarty do odczytu lub plik wyjściowy nie został
otwarty do zapisu.
.TP 
\fBEFAULT\fP
Niepoprawny adres.
.TP 
\fBEINVAL\fP
Deskryptor nie jest prawidłowy lub zablokowany; albo operacja w stylu
\fBmmap\fP(2) nie jest dostępna dla \fIin_fd\fP; albo \fIcount\fP jest ujemne.
.TP 
\fBEINVAL\fP
\fIout_fd\fP ma ustawiony znacznik \fBO_APPEND\fP. Obecnie nie jest to obsługiwane
przez \fBsendfile\fP().
.TP 
\fBEIO\fP
Nieokreślony błąd przy odczycie z \fIin_fd\fP.
.TP 
\fBENOMEM\fP
Zabrakło pamięci do odczytu z \fIin_fd\fP.
.TP 
\fBEOVERFLOW\fP
\fIcount\fP jest zbyt duże, operacja spowodowałaby przekroczenie maksymalnego
rozmiaru pliku wejściowego lub pliku wyjściowego.
.TP 
\fBESPIPE\fP
\fIoffset\fP nie wynosi NULL, lecz plik wejściowy nie jest przewijalny.
.SH WERSJE
Inne systemy uniksowe implementują \fBsendfile\fP() z różnym zachowaniem i
prototypami. Nie należy stosować tego wywołania w przenośnym programach.
.SH STANDARDY
Brak.
.SH HISTORIA
Linux 2.2, glibc 2.1.
.P
W Linuksie 2.4 i wcześniejszych, \fIout_fd\fP mógł odnosić się także do
zwykłego pliku; ta możliwość zniknęła w serii jąder Linux 2.6.x, lecz
przywrócono ją w Linuksie 2.6.33.
.P
Pierwotne, linuksowe wywołanie systemowe \fBsendfile\fP() nie było
zaprojektowane do obsługi dużych przesunięć plików. Z tego względu w
Linuksie 2.4 dodano \fBsendfile64\fP(), z szerszym typem argumentu
\fIoffset\fP. Funkcja opakowująca \fBsendfile\fP() z glibc radzi sobie z różnicami
w jądrze w sposób transparentny.
.SH UWAGI
.\" commit e28cc71572da38a5a12c1cfe4d7032017adccf69
\fBsendfile\fP() dokona transferu co najwyżej 0x7ffff000 (2\ 147\ 479\ 552)
bajtów, zwracając liczbę bajtów faktycznie przesłanych (jest to prawdziwe
zarówno dla systemów 32 jak i 64\-bitowych).
.P
Jeśli planuje się używać \fBsendfile\fP() do wysyłania plików do gniazda TCP,
lecz przed zawartością pliku trzeba dołączyć jakieś dane nagłówka, przydatne
będzie korzystanie z opcji \fBTCP_CORK\fP, opisanej w podręczniku \fBtcp\fP(7), w
celu ograniczenia liczby pakietów i poprawienia wydajności.
.P
Aplikacje mogą uznać za stosowne awaryjnie korzystanie z \fBread\fP(2) i
\fBwrite\fP(2) w przypadku, gdy \fBsendfile\fP() zawiedzie z błędem \fBEINVAL\fP lub
\fBENOSYS\fP.
.P
Jeśli \fIout_fd\fP odnosi się do gniazda lub potoku z obsługą zero\-copy,
wywołujący muszą upewnić się, że przesyłane części pliku, do których odnosi
się \fIin_fd\fP, pozostaną niezmodyfikowane do momentu skonsumowania
przesłanych danych przez odczytującego na drugim końcu \fIout_fd\fP.
.P
Typowo linuksowe wywołanie \fBsplice\fP(2) obsługuje przesyłanie danych
pomiędzy dwoma dowolnymi deskryptorami plików, pod warunkiem, że jeden (lub
obydwa) z nich jest potokiem.
.SH "ZOBACZ TAKŻE"
\fBcopy_file_range\fP(2), \fBmmap\fP(2), \fBopen\fP(2), \fBsocket\fP(2), \fBsplice\fP(2)
.PP
.SH TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika:
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
