التابع File.flock في روبي

من موسوعة حسوب
< Ruby‏ | File

يقفل التابع 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 للملف المحدَّد.

مصادر