الفرق بين المراجعتين ل"Ruby/File/flock"

من موسوعة حسوب
< Ruby‏ | File
اذهب إلى التنقل اذهب إلى البحث
(إنشاء الصفحة.)
 
(إضافة شرح)
 
سطر 1: سطر 1:
 
<noinclude>{{DISPLAYTITLE: التابع <code>File.flock</code> في روبي}}</noinclude>
 
<noinclude>{{DISPLAYTITLE: التابع <code>File.flock</code> في روبي}}</noinclude>
يقفل التابع <code>flock</code> ا
+
يقفل التابع <code>flock</code> الملف الذي استدعي معه أو يلغي القفل الذي طُبِّق عليه لحماية الملف أثناء إجراء عمليَّة عليه (مثل القراءة منه أو الكتابة عليه) إشارةً إلى أنَّ هذا الملف يُستعمل الآن.
 +
 
 +
هذا التابع غير متاح على جميع المنصات.
 
==البنية العامة==
 
==البنية العامة==
 
<syntaxhighlight lang="ruby">flock(locking_constant) → 0 or false</syntaxhighlight>
 
<syntaxhighlight lang="ruby">flock(locking_constant) → 0 or false</syntaxhighlight>
سطر 7: سطر 9:
  
 
=== <code>locking_constant</code> ===
 
=== <code>locking_constant</code> ===
يب
+
قيمة هذا المعامل هي أحد العمليات التالية:
 +
{| class="wikitable"
 +
!العمليَّة
 +
!الوصف
 +
|-
 +
|<code>LOCK_SH</code>
 +
|طلب الحصول على قفل مشاركة (shared lock، عند القراءة). تستطيع أكثر من عملية تطبيق هذا القفل على الملف المعطى في الوقت نفسه.
 +
|-
 +
|<code>LOCK_EX</code>
 +
|طلب الحصول على قفل استثنائي (exclusive lock، عند الكتابة). قد لا تتمكن سوى عملية واحدة من تطبيق هذا القفل على الملف المعطى مرةً واحدةً فقط في كل مرة.
 +
|-
 +
|<code>LOCK_UN</code>
 +
|إلغاء قفل النوعين السابقين.
 +
|}
 +
يمكن أيضًا إضافة الخيار <code>LOCK_NB</code> إلى أحد العمليَّات السابقة باستعمال المعامل <code>OR</code> الثنائي (|) إن شككت أن الملف مُقفل سابقًا إذ سيؤدي ذلك إلى عدم حجب الدالة انتظارًا لإلغاء قفله.
  
 
==القيمة المعادة==
 
==القيمة المعادة==
تعاد القيمة 0
+
تعاد القيمة 0 عند اتمام العملية، أو القيمة <code>false</code> عند فشلها.
 
==أمثلة==
 
==أمثلة==
 
مثال على استعمال التابع <code>flock</code>:
 
مثال على استعمال التابع <code>flock</code>:
<syntaxhighlight lang="ruby"># update a counter using write lock
+
<syntaxhighlight lang="ruby"># باستعمال قفل الكتابة counter تحديث الملف
# don't use "w" because it truncates the file before lock.
+
# لأنه يقتطع الملف قبل قفله "w" لا تستعمل الوضع
 
File.open("counter", File::RDWR|File::CREAT, 0644) {|f|
 
File.open("counter", File::RDWR|File::CREAT, 0644) {|f|
 
   f.flock(File::LOCK_EX)
 
   f.flock(File::LOCK_EX)
سطر 24: سطر 40:
 
}
 
}
  
# read the counter using read lock
+
# مع استعمال قفل القراءة counter القراءة من الملف
 
File.open("counter", "r") {|f|
 
File.open("counter", "r") {|f|
 
   f.flock(File::LOCK_SH)
 
   f.flock(File::LOCK_SH)

المراجعة الحالية بتاريخ 08:08، 1 ديسمبر 2018

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

مصادر