MEMCPY(3) | Podręcznik programisty Linuksa | MEMCPY(3) |
memcpy - kopiuje obszar pamięci
#include <string.h> void *memcpy(void *dest, const void *src, 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, C89, C99, SVr4, 4.3BSD.
Zignorowanie wymogu nienachodzenia na siebie obszarów pamięci jest źródłem prawdziwych 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), memccpy(3), memmove(3), mempcpy(3), strcpy(3), strncpy(3), wmemcpy(3)
Angielska wersja tej strony pochodzi z wydania 4.07 projektu Linux man-pages. Opis projektu, informacje dotyczące zgłaszania błędów oraz najnowszą wersję oryginału można znaleźć pod adresem https://www.kernel.org/doc/man-pages/.
Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Jarosław Beczek (PTM) <bexx@poczta.onet.pl>, Andrzej Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>.
Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją 4.07 oryginału.
2015-07-23 |