التابع open‎ الخاص بالصنف Kernel في روبي

من موسوعة حسوب
< Ruby‏ | Kernel
اذهب إلى: تصفح، ابحث

ينشئ التابع open كائنًا من النوع IO متصلًا بالمجرى أو الملف أو العملية الفرعية (subprocess) المحددة.

البنية العامة

open(path [, mode [, perm]] [, opt])  io or nil
open(path [, mode [, perm]] [, opt]) {|io| block }   obj
في حال إعطاء كتلة، فستُسدعَى بتمرير كائن من النوع IO كوسيط إليها، والذي سيُغلق تلقائيًا عند الانتهاء من تنفيذ الكتلة ثم سيعاد الناتج.

إذا بُدئ الوسيط path بشرطة عمودية ("|") ، فسيتم إنشاء عملية فرعية (subprocess)، متصلة بالمُستدعي (caller) بواسطة زوج من الأنابيب (pipes). يمكن استخدام كائن من النوع IO المُعاد لأجل الكتابة في مجرى الدخل القياسي، أو القراءة من مجرى الخرج القياسي لهذه العملية الفرعية.

إذا أُعقبت الشرطة العمودية بعلامة ناقص واحدة ("-|")، فستنشئ روبي عملية فرعية جديدة متصلة بالعملية الأم. أما إذا لم يكن الأمر (command) يساوي "-"، فستنفذ العملية الفرعية الأمر.

إذا كانت العملية الفرعية هي روبي نفسها (مفتوحة عبر "-|")، فسيعيد استدعاء التابع open القيمة nil. وفي حال تمرير كتلة عند استدعاء open، فستنفذ الكتلة مرتين: مرة في العملية الأم ومرة في العملية الفرعية.

الوسيط block سيكون كائنًا من النوع IO في العملية الأم والقيمة nil في العملية الفرعية. سيتم ريط الكائن IO الأب بالمجرى ‎$stdin والمجرى ‎$stdout. سيتم إنهاء العملية الفرعية في نهاية الكتلة.

المعاملات

path‎

مسار الملف المراد فتحه. إذا لم يبدأ بخط عمودي (|) ، فسيُعدُّ اسمَ الملف المراد فتحه باستخدام الوضع mode المحدد.

mode‎

الوضع الذي سيُفتَح الملف فيه. القيمة الافتراضية هي: "r". يكون إمَّا سلسلة نصية أو عدد صحيح. إن كان عددًا صحيحًا، فيجب أن تطبق العملية OR الثنائية على رايات الدالة open(2)‎، مثل File:: RDWR أو File::EXCL. أما إذا كان سلسلة نصية، فسيكون إما "fmode" أو "fmode: ext_enc" أو "fmode: ext_enc: int_enc".

راجع توثيق التابع IO.new لمزيد من المعلومات حول المعامل mode.

perm‎

في حالة إنشاء ملف، قد يعين المعامل perm‎ أذوناته الأولية. انظر التابع File.new والدالة open(2)‎ والدالة chmod(2)‎ لمزيد من المعلومات حول الأذونات.

opt‎

يحدد الخيارات لفتح الملف.

القيمة المعادة

يعاد كائنٌ من النوع IO متصلًا بالمجرى أو الملف أو العملية الفرعية المحددة. وإذا كانت العملية الفرعية هي روبي، فستُعاد القيمة nil.

أمثلة

القراءة من الملف "testfile" عبر استخدام التابع open‎:
open("testfile") do |f|
  print f.gets
end
سينتج عن تنفيذ المثال ناتج شبيه بالناتج التالي:
This is line one
مثالٌ آخر حول فتح عملية فرعية وقراءة ناتجها عبر استخدام التابع open‎:
cmd = open("|date")
print cmd.gets
cmd.close
سينتج عن تنفيذ المثال ناتج شبيه بالناتج التالي:
Wed Apr  9 08:56:31 CDT 2003‎
مثالٌ آخر حول فتح عملية فرعية تُشغّل نفس برنامج روبي عبر استخدام التابع open‎:
f = open("|-", "w+")
if f.nil?
  puts "in Child"
  exit
else
  puts "Got: #{f.gets}"
end
سينتج عن تنفيذ المثال ناتج شبيه بالناتج التالي:
Got: in Child‎
يشرح المثال الأخير كيفية فتح عملية فرعية باستخدام كتلة لاستلام كائن من النوع IO:
open "|-" do |f|
  if f then
    # parent process
    puts "Got: #{f.gets}"
  else
    # child process
    puts "in Child"
  end
end
سينتج عن تنفيذ المثال ناتج شبيه بالناتج التالي:
Got: in Child

انظر أيضا

  • التابع fork: ينشئ عملية فرعية (subprocess).

مصادر