readahead(2)

الاسم
readahead - بدء القراءة المسبقة للملف في خبيئة الصفحات

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

موجز
#define _GNU_SOURCE             /* انظر feature_test_macros(7) */
#define _FILE_OFFSET_BITS 64
#include <fcntl.h>

ssize_t readahead(int fd, off_t offset, size_t count);

الوصف
تبدأ readahead() القراءة المسبقة على ملف بحيث تُلبى القراءات اللاحقة من ذلك الملف من الخبيئة، ولا تُحجب على إدخال/إخراج القرص (بافتراض أن القراءة المسبقة بُدئت مبكرًا بما يكفي وأن الأنشطة الأخرى على النظام لم تقم في الوقت نفسه بطرد الصفحات من الخبيئة).

الوسيطة fd هي واصف ملف يُحدد الملف المراد قراءته. تحدد الوسيطة offset نقطة البداية التي ستُقرأ منها البيانات، وتحدد count عدد البايتات المراد قراءتها. يُنفذ الإدخال/الإخراج بصفحات كاملة، بحيث يُقرّب offset فعليًا إلى أسفل إلى حد صفحة، وتُقرأ البايتات حتى حد الصفحة التالي الأكبر من أو يساوي (offset+count). لا تقرأ readahead() بعد نهاية الملف. يبقى إزاحة الملف لوصف الملف المفتوح المشار إليه بواسطة واصف الملف fd دون تغيير.

قيمة الإرجاع
عند النجاح، تُرجع readahead() 0؛ عند الفشل، تُرجع -1، ويُضبط errno للإشارة إلى الخطأ.

الأخطاء

EBADF
    fd ليس واصف ملف صالحًا أو ليس مفتوحًا للقراءة.

EINVAL
    لا يشير fd إلى نوع ملف يمكن تطبيق readahead() عليه.

الإصدارات
على بعض البنيات ذات 32 بت، يختلف توقيع الاستدعاء لاستدعاء النظام هذا، للأسباب الموصوفة في syscall(2).

المعايير
لينكس.

التاريخ
لينكس 2.4.13، glibc 2.3.

ملاحظات
يجب تعريف _FILE_OFFSET_BITS ليكون 64 في الكود الذي يستخدم مؤشرًا إلى readahead، إذا كان الكود يُقصد به أن يكون محمولاً إلى منصات x86 و ARM التقليدية ذات 32 بت حيث يكون عرض off_t مبدئيًا 32 بت.

العلل
تحاول readahead() جدولة القراءات في الخلفية والعودة فورًا. ومع ذلك، قد تُحجب أثناء قراءة بيانات تعريف نظام الملفات اللازمة لتحديد موقع الكتل المطلوبة. يحدث هذا بشكل متكرر مع ext[234] على الملفات الكبيرة التي تستخدم الكتل غير المباشرة بدلاً من الامتدادات، مما يعطي مظهرًا بأن الاستدعاء يُحجب حتى تُقرأ البيانات المطلوبة.

انظر أيضًا
lseek(2), madvise(2), mmap(2), posix_fadvise(2), read(2)

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

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

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