التابع open
الخاص بالصنف Kernel
في روبي
ينشئ التابع open كائنًا من النوع IO
متصلا بالمجرى أو الملف أو العملية الفرعية (subprocess) المحددة.
إذا لم يبدأ path
بشرطة عمودية (|
) ، فسيُعامل كاسم الملف المراد فتحه باستخدام الوضع المحدد (افتراضيًا "r").
mode
هو إما سلسلة نصية أو عدد صحيح. إن كان عددًا صحيحًا، فيجب أن يكون عبارة عن bitwise-or لراية open(2)، مثل File :: RDWR أو File :: EXCL. أما إذا كان سلسلة نصية، فهو إما "fmode" أو "fmode: ext_enc" أو "fmode: ext_enc: int_enc".
راجع توثيق IO.new
لمزيد من المعلومات حول موجّهات mode
.
في حالة إنشاء ملف، قد تُعيّن أذوناته الأولية باستخدام الوسيط perm
. انظر File.new
وصفحات open(2) و chmod(2) لمزيد من المعلومات حول للأذونات.
في حال إعطاء كتلة، فستسدعى بتمرير كائن IO
كوسيط، وسيُغلق IO
تلقائيًا عند إنهاء الكتلة. وستعاد قيمة الكتلة.
إذا بُدئت path
بشرطة عمودية ("|"
) ، فسيتم إنشاء عملية فرعية، متصلة بالمُستدعي (caller) بواسطة زوج من الأنابيب (pipes). يمكن استخدام كائن IO
المُعاد للكتابة في مجرى الإدخال القياسي والقراءة من مجرى الإخراج القياسي لهذه العملية الفرعية.
إذا أعقُبت الشرطة العمودية بعلامة ناقص واحدة ("|-"
) ، فستنشئ روبي عملية فرعية جديدة، والتي ستكون متصلة بالعملية الأم. أما إذا لم يكن الأمر هو "-"
، فستنفذ العملية الفرعية الأمر.
عندما تكون العملية الفرعية هي Ruby (مفتوحة عبر "|-"
) ، استدعاء open
سيعيد nil
. في حال تمرير كتلة عند استدعاء open، فستنفذ الكتلة مرتين - مرة في العملية الأم ومرة في العملية الفرعية.
الوسيط block سيكون كائنًا IO
في العملية الأم و nil
في العملية الفرعية. سيتم ريط أب (parent') الكائن IO
ب $stdin و $stdout.. سيتم إنهاء العملية الفرعية في نهاية الكتلة.
أمثلة ¶
↑
القراءة من الملف "testfile":
الناتج:
افتح عملية فرعية وقراءة ناتجها:
الناتج:
Wed Apr 9 08:56:31 CDT 2003
افتح عملية فرعية تُشغّل نفس برنامج Ruby:
الناتج:
Got: in Child
افتح عملية فرعية باستخدام كتلة لاستلام كائن IO
:
الناتج:
Got: in Child
البنية العامة
open(path [, mode [, perm]] [, opt]) → io or nil
open(path [, mode [, perm]] [, opt]) {|io| block } → obj
المعاملات
path
mode
perm
opt
القيمة المُعادة
أمثلة
مثال على استخدام التابع open
:
open("testfile") do |f|
print f.gets
end
انظر أيضا
- التابع
loop
: ينفذ التابع loop الكتلة البرمجية بشكل متكرر. - التابع
p
: يكتب التابع p لكل كائن يُمرر إليه ناتج التعبير يكتب مباشرة .inspect
، متبوعًا بسطر جديد في مجرى الإخراج القياسي للبرنامج.