الفرق بين المراجعتين لصفحة: «Ruby/File/flock»
جميل-بيلوني (نقاش | مساهمات) إنشاء الصفحة. |
جميل-بيلوني (نقاش | مساهمات) إضافة شرح |
||
سطر 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"># | <syntaxhighlight lang="ruby"># باستعمال قفل الكتابة counter تحديث الملف | ||
# | # لأنه يقتطع الملف قبل قفله "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: | ||
} | } | ||
# | # مع استعمال قفل القراءة 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
للملف المحدَّد.