التابع File.flock
في روبي
يقفل التابع flock
الملف الذي استدعي معه أو يلغي القفل الذي طُبِّق عليه لحماية الملف أثناء إجراء عمليَّة عليه (مثل القراءة منه أو الكتابة عليه) إشارةً إلى أنَّ هذا الملف يُستعمل الآن.
هذا التابع غير متاح على جميع المنصات.
البنية العامة
flock(locking_constant) → 0 or false
المعاملات
locking_constant
قيمة هذا المعامل هي أحد العمليات التالية:
العمليَّة | الوصف |
---|---|
LOCK_SH
|
طلب الحصول على قفل مشاركة (shared lock، عند القراءة). تستطيع أكثر من عملية تطبيق هذا القفل على الملف المعطى في الوقت نفسه. |
LOCK_EX
|
طلب الحصول على قفل استثنائي (exclusive lock، عند الكتابة). قد لا تتمكن سوى عملية واحدة من تطبيق هذا القفل على الملف المعطى مرةً واحدةً فقط في كل مرة. |
LOCK_UN
|
إلغاء قفل النوعين السابقين. |
يمكن أيضًا إضافة الخيار LOCK_NB
إلى أحد العمليَّات السابقة باستعمال المعامل OR
الثنائي (|) إن شككت أن الملف مُقفل سابقًا إذ سيؤدي ذلك إلى عدم حجب الدالة انتظارًا لإلغاء قفله.
القيمة المعادة
تعاد القيمة 0 عند اتمام العملية، أو القيمة false
عند فشلها.
أمثلة
مثال على استعمال التابع flock
:
# باستعمال قفل الكتابة counter تحديث الملف
# لأنه يقتطع الملف قبل قفله "w" لا تستعمل الوضع
File.open("counter", File::RDWR|File::CREAT, 0644) {|f|
f.flock(File::LOCK_EX)
value = f.read.to_i + 1
f.rewind
f.write("#{value}\n")
f.flush
f.truncate(f.pos)
}
# مع استعمال قفل القراءة counter القراءة من الملف
File.open("counter", "r") {|f|
f.flock(File::LOCK_SH)
p f.read
}
انظر أيضا
- التابع
ctime
: يعيد وقت آخر تغيير أجري على ملف محدَّد.
- التابع
stat
: يعيد كائنًا من النوعFile::Stat
للملف المحدَّد.