NAZWA¶
memcpy - kopiuje obszar pamięci
SKŁADNIA¶
#include <string.h>
void *memcpy(void *dest, const void *src, size_t n);
OPIS¶
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).
WARTOŚĆ ZWRACANA¶
Funkcja memcpy() zwraca wskaźnik do dest.
ATRYBUTY¶
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 |
ZGODNE Z¶
POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.
UWAGI¶
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)).
O STRONIE¶
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/.
TŁUMACZENIE¶
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.