posix_fallocate(3)

الاسم
posix_fallocate - تخصيص مساحة ملف

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

موجز
#include <fcntl.h>

int posix_fallocate(int fd, off_t offset, off_t size);

    متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

posix_fallocate():
    _POSIX_C_SOURCE >= 200112L

الوصف
تضمن الدالة posix_fallocate() تخصيص مساحة قرص للملف المشار إليه بواصف الملف fd للبايتات في النطاق الذي يبدأ من offset ويمتد لـ size بايت. بعد استدعاء ناجح لـ posix_fallocate()، تُضمن عمليات الكتابة اللاحقة للبايتات في النطاق المحدد ألا تفشل بسبب نقص مساحة القرص.

إذا كان حجم الملف أقل من offset+size، يُزاد الملف إلى هذا الحجم؛ وإلا يُترك حجم الملف دون تغيير.

قيمة الإرجاع
تُرجع posix_fallocate() صفرًا عند النجاح، أو رقم خطأ عند الفشل. لاحظ أن errno لا يُضبط.

الأخطاء

EBADF
    fd ليس واصف ملف صالحًا، أو ليس مفتوحًا للكتابة.

EFBIG
    يتجاوز offset+size الحجم الأقصى للملف.

EINTR
    التُقطت إشارة أثناء التنفيذ.

EINVAL
    كان offset أقل من 0، أو كان size أقل من أو يساوي 0، أو لا يدعم نظام الملفات الأساسي العملية.

ENODEV
    لا يشير fd إلى ملف عادي.

ENOSPC
    لا توجد مساحة كافية على الجهاز الذي يحتوي على الملف المشار إليه بواسطة fd.

EOPNOTSUPP
    لا يدعم نظام الملفات المحتوي على الملف المشار إليه بـ fd هذه العملية. يمكن إرجاع رمز الخطأ هذا بواسطة مكتبات C التي لا تؤدي المحاكاة الموضحة في التحذيرات، مثل musl libc.

ESPIPE
    يشير fd إلى أنبوب.

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

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

التاريخ
glibc 2.1.94. POSIX.1-2001

ينص POSIX.1-2008 على أن التنفيذ يجب أن يُعطي خطأ EINVAL إذا كان size يساوي 0، أو كان offset أقل من 0. ينص POSIX.1-2001 على أن التنفيذ يجب أن يُعطي خطأ EINVAL إذا كان size أقل من 0، أو كان offset أقل من 0، ويجوز أن يُعطي الخطأ إذا كان size يساوي صفرًا.

تحذيرات
في تنفيذ glibc، تُنفذ posix_fallocate() باستخدام استدعاء النظام fallocate(2)، وهو آمن للخيوط. إذا لم يدعم نظام الملفات الأساسي fallocate(2)، تُحاكى العملية مع التحذيرات التالية:

•   المحاكاة غير فعالة.

•   توجد حالة سباق حيث يمكن استبدال عمليات الكتابة المتزامنة من خيط أو عملية أخرى ببايتات فارغة.

•   توجد حالة سباق حيث قد تؤدي الزيادات المتزامنة في حجم الملف بواسطة خيط أو عملية أخرى إلى ملف حجمه أصغر من المتوقع.

•   إذا فُتح fd بعلمي O_APPEND أو O_WRONLY، تفشل الدالة مع الخطأ EBADF.

بشكل عام، المحاكاة ليست آمنة للخيوط. على لينكس، قد تستخدم التطبيقات fallocate(2) إذا لم تتحمل تحذيرات المحاكاة. بشكل عام، يُوصى بذلك فقط إذا خطط التطبيق لإنهاء العملية عند إرجاع EOPNOTSUPP، وإلا فسيحتاج التطبيق نفسه إلى تنفيذ حل بديل بنفس مشاكل المحاكاة التي يوفرها glibc.

انظر أيضًا
fallocate(1)، fallocate(2)، lseek(2)، posix_fadvise(2)

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

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

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