.\" -*- coding: UTF-8 -*- .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-1-para .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH sendfile 2 "17 maja 2025 r." "Linux man\-pages 6.15" .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 \fP .P .\" The below is too ugly. Comments about glibc versions belong .\" in the notes, not in the header. .\" .\" .B #include .\" .B #if (__GLIBC__==2 && __GLIBC_MINOR__>=1) || __GLIBC__>2 .\" .B #include .\" #else .\" .B #include .\" .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 . .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 .