memcpy(3) | Library Functions Manual | memcpy(3) |
memcpy - kopiuje obszar pamięci
Standardowa biblioteka C (libc, -lc)
#include <string.h>
void *memcpy(void dest[restrict .n], const void src[restrict .n], size_t n);
Funkcja memcpy() kopiuje n bajtów z obszaru pamięci src do obszaru pamięci dest. Obszary te nie mogą na siebie nachodzić. Jeżeli obszary pamięci na siebie nachodzą, należy używać memmove(3).
Funkcja memcpy() zwraca wskaźnik do dest.
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
Interfejs | Atrybut | Wartość |
memcpy() | Bezpieczeństwo wątkowe | MT-Safe |
POSIX.1-2001, POSIX.1-2008, C99, SVr4, 4.3BSD.
Zignorowanie wymogu nienachodzenia na siebie obszarów pamięci jest źródłem istotnych błędów (Standardy POSIX i C jednoznacznie określają, że wykorzystanie memcpy() z nachodzącymi na siebie obszarami pamięciami daje niezdefiniowane zachowanie). Co więcej, w glibc 2.13 na niektórych platformach (w tym x86-64) przeprowadzana jest optymalizacja wydajności memcpy() obejmująca zmianę kolejności kopiowania bajtów z src do dest.
Zmiana ta ujawniła poważne błędy w wielu aplikacjach przeprowadzających kopiowania na nachodzących obszarach pamięci. W poprzedniej implementacji, w której kolejność kopiowanych bajtów szczęśliwie ukrywała ten błąd, który odsłonił się po jej odwróceniu. W glibc 2.14 dodano wersjonowany symbol, dzięki czemu stare pliki binarne (zlinkowane z glibc w wersji wcześniejszej niż 2.14) korzystają z implementacji memcpy() która w sposób bezpieczny obsługuje przypadek nachodzących obszarów pamięci (udostępniając "starszą" implementację memcpy(), która była aliasem memmove(3)).
bcopy(3), bstring(3), memccpy(3), memmove(3), mempcpy(3), strcpy(3), strncpy(3), wmemcpy(3)
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Jarosław Beczek <bexx@poczta.onet.pl>, Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.
29 grudnia 2022 r. | Linux man-pages 6.03 |