memcpy(3)

الاسم
memcpy - نسخ منطقة الذاكرة

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <string.h>

void *memcpy(size_t n;
             void dest[restrict n], const void src[restrict n],
             size_t n);

الوصف
تنسخ الدالة memcpy() عدد n بايت من منطقة الذاكرة src إلى منطقة الذاكرة dest. يجب ألا تتداخل منطقتا الذاكرة. استخدم memmove(3) إذا كانت منطقتا الذاكرة متداخلتين.

قيمة الإرجاع
تُرجع الدالة memcpy() مؤشرًا إلى dest.

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
memcpy() | سلامة الخيوط | MT-Safe

المعايير
C11, POSIX.1-2008.

التاريخ
POSIX.1-2001، C89، SVr4، 4.3BSD.

تحذيرات
كان عدم الالتزام بشرط عدم تداخل منطقتي الذاكرة مصدرًا لأخطاء كبيرة. (تنص معايير POSIX وC صراحةً على أن استخدام memcpy() مع مناطق متداخلة يُنتج سلوكًا غير مُعرّف.) والأهم من ذلك، في glibc 2.13، تضمن تحسين أداء memcpy() على بعض المنصات (بما في ذلك x86-64) تغيير الترتيب الذي نُسخت به البايتات من src إلى dest.

كشف هذا التغيير عن أعطال في عدد من التطبيقات التي أجرت نسخًا بمناطق متداخلة. في ظل التنفيذ السابق، أخفى ترتيب نسخ البايتات الخلل بشكل عرضي، والذي ظهر عند عكس ترتيب النسخ. في glibc 2.14، أُضيف رمز مُرقّم بحيث تستخدم البرامج الثنائية القديمة (أي تلك المرتبطة بإصدارات glibc الأقدم من 2.14) تنفيذ memcpy() يعالج حالة المخازن المؤقتة المتداخلة بأمان (من خلال توفير تنفيذ memcpy() "أقدم" كان مُستعارًا لـ memmove(3)).

انظر أيضًا
bcopy(3), bstring(3), memccpy(3), memmove(3), mempcpy(3), strcpy(3), strncpy(3), wmemcpy(3)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.