| fsync(2) | System Calls Manual | fsync(2) |
الاسم¶
fsync, fdatasync - مزامنة حالة الملف الداخلية مع جهاز التخزين
المكتبة¶
مكتبة سي المعيارية (libc، -lc)
موجز¶
#include <unistd.h>
int fsync(int fd);
int fdatasync(int fd);
fsync():
glibc 2.16 and later:
No feature test macros need be defined
glibc up to and including 2.15:
_BSD_SOURCE || _XOPEN_SOURCE
|| /* Since glibc 2.8: */ _POSIX_C_SOURCE >= 200112L
fdatasync():
_POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >= 500
الوصف¶
fsync() ينقل ("يُفرغ") جميع البيانات الداخلية المعدلة (أي صفحات خبيئة المخزن المؤقت المعدلة) للملف المشار إليه بواصف الملف fd إلى جهاز القرص (أو جهاز تخزين دائم آخر) بحيث يمكن استرجاع جميع المعلومات المتغيرة حتى لو تعطل النظام أو أعيد تشغيله. يتضمن ذلك الكتابة عبر خبيئة القرص أو إفراغها إن وجدت. يحجب الاستدعاء حتى يبلغ الجهاز بأن النقل قد اكتمل.
بالإضافة إلى إفراغ بيانات الملف، يُفرغ fsync() أيضًا معلومات البيانات الوصفية المرتبطة بالملف (انظر inode(7)).
استدعاء fsync() لا يضمن بالضرورة وصول الإدخال في الدليل الذي يحتوي على الملف إلى القرص أيضًا. لذلك، يلزم استدعاء fsync() صريح على واصف ملف للدليل.
fdatasync() مشابه لـ fsync()، لكنه لا يُفرغ البيانات الوصفية المعدلة إلا إذا كانت تلك البيانات الوصفية ضرورية للسماح بمعالجة استرجاع بيانات لاحق بشكل صحيح. على سبيل المثال، التغييرات في st_atime أو st_mtime (على التوالي، وقت آخر وصول ووقت آخر تعديل؛ انظر inode(7)) لا تتطلب إفراغًا لأنها ليست ضرورية لمعالجة قراءة بيانات لاحقة بشكل صحيح. من ناحية أخرى، تغيير حجم الملف (st_size، كما يتم بواسطة ftruncate(2) مثلاً)، يتطلب إفراغ البيانات الوصفية.
الهدف من fdatasync() هو تقليل نشاط القرص للتطبيقات التي لا تتطلب مزامنة جميع البيانات الوصفية مع القرص.
قيمة الإرجاع¶
عند النجاح، تُرجع استدعاءات النظام هذه صفرًا. عند الخطأ، يُرجع -1، ويُضبط errno للإشارة إلى الخطأ.
الأخطاء¶
- EBADF
- fd ليس واصف ملف مفتوحًا صالحًا.
- EINTR
- قُطعت الدالة بإشارة؛ انظر signal(7).
- EIO
- حدث خطأ أثناء المزامنة. قد يتعلق هذا الخطأ ببيانات كُتبت إلى واصف ملف آخر على نفس الملف. منذ Linux 4.13، سيتم الإبلاغ عن الأخطاء الناتجة عن الكتابة الخلفية إلى جميع واصفات الملفات التي ربما كتبت البيانات التي تسببت في الخطأ. بعض أنظمة الملفات (مثل NFS) تتبع بدقة البيانات التي جاءت من خلال أي واصف ملف، وتعطي تقارير أكثر دقة. أنظمة الملفات الأخرى (مثل معظم أنظمة الملفات المحلية) ستُبلغ عن الأخطاء إلى جميع واصفات الملفات التي كانت مفتوحة على الملف عند تسجيل الخطأ.
- ENOSPC
- نفدت مساحة القرص أثناء المزامنة.
- EROFS
- EINVAL
- fd مرتبط بملف خاص (مثل أنبوب، FIFO، أو مقبس) لا يدعم المزامنة.
- ENOSPC
- EDQUOT
- fd مرتبط بملف على NFS أو نظام ملفات آخر لا يخصص مساحة في وقت استدعاء النظام write(2)، وفشلت كتابة سابقة بسبب عدم كفاية مساحة التخزين.
الإصدارات¶
على أنظمة POSIX التي يتوفر فيها fdatasync()، يُعرف _POSIX_SYNCHRONIZED_IO في <unistd.h> بقيمة أكبر من 0. (انظر أيضًا sysconf(3).)
المعايير¶
POSIX.1-2024.
التاريخ¶
- fsync()
- 4.2BSD, SUSv1, POSIX.1-1996.
- fdatasync()
- POSIX.1-1996.
في Linux 2.2 والإصدارات الأقدم، fdatasync() مكافئ لـ fsync()، وبالتالي ليس له ميزة أداء.
تطبيقات fsync() في النوى القديمة وأنظمة الملفات الأقل استخدامًا لا تعرف كيفية إفراغ خبائن القرص. في هذه الحالات، يجب تعطيل خبائن القرص باستخدام hdparm(8) أو sdparm(8) لضمان التشغيل الآمن.
تحت AT&T UNIX System V Release 4، يجب فتح fd للكتابة. هذا في حد ذاته غير متوافق مع واجهة BSD الأصلية ومحظور بواسطة POSIX، لكنه مع ذلك لا يزال موجودًا في HP-UX و AIX.
انظر أيضًا¶
sync(1), bdflush(2), open(2), posix_fadvise(2), pwritev(2), sync(2), sync_file_range(2), fflush(3), fileno(3), hdparm(8), mount(8)
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 8 فبراير 2026 | صفحات دليل لينكس 6.18 |