lockf(3)

الاسم
lockf - تطبيق أو اختبار أو إزالة قفل POSIX على ملف مفتوح

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

موجز
#include <unistd.h>

int lockf(int fd, int op, off_t size);

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

lockf():
    _XOPEN_SOURCE >= 500
        || /* glibc >= 2.19: */ _DEFAULT_SOURCE
        || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

الوصف
يُطبَّق أو يُختبر أو يُزال قفل POSIX على مقطع من ملف مفتوح. يُحدَّد الملف بواسطة fd، وهو واصف ملف مفتوح للكتابة، والإجراء بواسطة op، ويتكون المقطع من مواضع البايت pos..pos+size-1 إذا كان size موجبًا، و pos-size..pos-1 إذا كان size سالبًا، حيث pos هو موضع الملف الحالي، وإذا كان size صفرًا، يمتد المقطع من موضع الملف الحالي إلى اللانهاية، ليشمل مواضع نهاية الملف الحالية والمستقبلية. في جميع الحالات، قد يمتد المقطع إلى ما بعد نهاية الملف الحالية.

على لينكس، lockf() هي مجرد واجهة فوق قفل fcntl(2). تنفذ العديد من الأنظمة الأخرى lockf() بهذه الطريقة، لكن لاحظ أن POSIX.1 يترك العلاقة بين أقفال lockf() و fcntl(2) غير محددة. يجب على التطبيق المحمول تجنب خلط استدعاءات هذه الواجهات.

العمليات الصالحة مُعطاة أدناه:

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

F_TLOCK
    نفس F_LOCK لكن الاستدعاء لا يُحجَز أبدًا ويعيد خطأ بدلاً من ذلك إذا كان الملف مقفلاً بالفعل.

F_ULOCK
    يُفتَح قفل المقطع المشار إليه من الملف. قد يتسبب هذا في تقسيم مقطع مقفل إلى مقطعين مقفلين.

F_TEST
    يُختبر القفل: يُعيد 0 إذا كان المقطع المحدد غير مقفل أو مقفلاً بواسطة هذه العملية؛ يُعيد -1، ويُعيِّن errno إلى EAGAIN (EACCES على بعض الأنظمة الأخرى)، إذا كانت عملية أخرى تحمل قفلاً.

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

الأخطاء

EACCES أو EAGAIN
    الملف مقفل ووُصِف F_TLOCK أو F_TEST، أو العملية محظورة لأن الملف قد خُوطِط في الذاكرة بواسطة عملية أخرى.

EBADF
    fd ليس واصف ملف مفتوح؛ أو op هو F_LOCK أو F_TLOCK و fd ليس واصف ملف قابلًا للكتابة.

EDEADLK
    كان op هو F_LOCK وستتسبب عملية القفل هذه في طريق مسدود.

EINTR
    أثناء انتظار الحصول على القفل، قُطع النداء بسبب وصول إشارة التقطها معالج؛ انظر signal(7).

EINVAL
    وُصِفت عملية غير صالحة في op.

ENOLCK
    عدد كبير جدًا من أقفال المقطع مفتوحة، جدول القفل ممتلئ.

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

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

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

انظر أيضًا
fcntl(2)، flock(2)

locks.txt و mandatory-locking.txt في دليل مصدر نواة لينكس Documentation/filesystems (في النوى القديمة، توجد هذه الملفات مباشرة تحت دليل Documentation، ويُسمى mandatory-locking.txt بـ mandatory.txt)

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

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

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