msync(2)

الاسم
msync - مزامنة ملف مع خريطة ذاكرة

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

موجز
#include <sys/mman.h>

int msync(size_t length;
          void addr[length], size_t length, int flags);

الوصف
msync() يُفرغ التغييرات التي أُجريت على النسخة الداخلية من ملف تم تعيينه في الذاكرة باستخدام mmap(2) إلى نظام الملفات. بدون استخدام هذه الاستدعاء، لا يوجد ضمان بأن التغييرات ستُكتب قبل استدعاء munmap(2). بشكل أكثر دقة، يتم تحديث جزء الملف الذي يتوافق مع منطقة الذاكرة التي تبدأ عند addr وطولها length.

وسيطة flags يجب أن تحدد بالضبط واحدة من MS_ASYNC و MS_SYNC، وقد تتضمن بالإضافة إلى ذلك البت MS_INVALIDATE. هذه البتات لها المعاني التالية:

MS_ASYNC
    يحدد أن يتم جدولة تحديث، لكن الاستدعاء يعود فورًا.

MS_SYNC
    يطلب تحديثًا وينتظر اكتماله.

MS_INVALIDATE
    يطلب إبطال تعيينات أخرى لنفس الملف (بحيث يمكن تحديثها بالقيم الجديدة التي كُتبت للتو).

قيمة الإرجاع
عند النجاح، يُعاد الصفر. وعند حدوث خطأ، يُعاد الرقم -1، ويُضبط errno للإشارة إلى الخطأ.

الأخطاء

EBUSY
    MS_INVALIDATE تم تحديده في flags، ويوجد قفل ذاكرة للنطاق العنواني المحدد.

EINVAL
    addr ليس مضاعفًا لـ PAGESIZE؛ أو أي بت غير MS_ASYNC | MS_INVALIDATE | MS_SYNC مضبوط في flags؛ أو كلا MS_SYNC و MS_ASYNC مضبوطان في flags.

ENOMEM
    الذاكرة المشار إليها (أو جزء منها) لم تكن معينة.

الإصدارات
وفقًا لـ POSIX، يجب تحديد إما MS_SYNC أو MS_ASYNC في flags، وبالفعل سيؤدي الفشل في تضمين أحد هذه الأعلام إلى فشل msync() على بعض الأنظمة. ومع ذلك، يسمح Linux باستدعاء msync() لا يحدد أيًا من هذه الأعلام، بدلالات (حاليًا) مكافئة لتحديد MS_ASYNC. (منذ Linux 2.6.19، MS_ASYNC هو في الواقع عملية فارغة، حيث يتتبع النواة الصفحات المتسخة بشكل صحيح ويُفرغها إلى التخزين حسب الحاجة.) بغض النظر عن سلوك Linux، يجب على التطبيقات المحمولة والمقاومة للمستقبل التأكد من أنها تحدد إما MS_SYNC أو MS_ASYNC في flags.

المعايير
POSIX.1-2024.

التاريخ
SUSv1, POSIX.1-1996.

تم تقديم هذه الاستدعاء في Linux 1.3.21، ثم استخدم EFAULT بدلاً من ENOMEM. في Linux 2.4.19، تم تغيير هذا إلى قيمة POSIX ENOMEM.

على أنظمة POSIX التي تتوفر فيها msync()، يتم تعريف كل من _POSIX_MAPPED_FILES و _POSIX_SYNCHRONIZED_IO في <unistd.h> بقيمة أكبر من 0. (انظر أيضًا sysconf(3).)

انظر أيضًا
mmap(2)

ب. أ. جالميستر، POSIX.4، دار أورايلي، ص. 128–129 و 389–391.

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

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

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