التابع IO.pipe
في روبي
ينشئ التابع pipe
زوجًا من طرفي أنبوب (pipe endpoints) متصلين ببعضهما بعضًا ثم يعيدهما على هيئة مصفوفة من الكائنات IO
.
في حال إعطاء كتلة، ستُستدعى تلك الكتلة، وتعاد قيمتها، مع تمرير أنبوب القراءة وأنبوب الكتابة بعد إنشائهما كوسائط من النوع IO
إليها. وسيتم إغلاقهما إن لم يغلقا عند خروج الكتلة. أي أن إغلاق هذين المجريين لن يتسبب في حدوث خطأ.
التابع pipe
غير متوفر في جميع أنظمة التشغيل.
إذا تم تمرير ترميز معين (اسم ترميز أو كائن ترميز) كمعامل إلى التابع، فسيتم وسم السلسلة النصية المقروءة من الأنبوب (pipe) بذلك الترميز. وإن كان المعامل على هيئة علامتي ترميز مفصولتين بنقطتين رأسيتين (مثل "A:B
")، فستُحوّل السلسلة النصية المقروءة من الترميز A
(الترميز الخارجي) إلى الترميز B
(الترميز الداخلي)، ثم ستوسم باسم الترميز B
. إذا تم تمرير كائنين إلى التابع pipe
، فيجب أن يكونا كائني ترميز، أو أسماء ترميز، بحيث يمثل أولهما الترميز الخارجي، وثانيهما الترميز الداخلي. إذا تم تحديد الترميز الخارجي والترميز الداخلي، فسيحدد المعامل opt
(انظر فقرة البنية العامة) خيارات التحويل.
البنية العامة
pipe → [read_io, write_io]
pipe(ext_enc) → [read_io, write_io]
pipe("ext_enc:int_enc" [, opt]) → [read_io, write_io]
pipe(ext_enc, int_enc [, opt])→ [read_io, write_io]
pipe(...) {|read_io, write_io| ... }
المعاملات
ext_enc
الترميز الخارجي.
int_enc
الترميز الداخلي
opt
خيارات التحويل بين الترميزين الداخلي والخارجي إن أعطيا.
القيمة المعادة
تعاد مصفوفة بعنصرين بالشكل [ read_io, write_io ]
تحوي الأنبوبين (الكائنين IO
) الذين جرى إنشاؤهما.
أمثلة
في المثال التالي، تغلق العمليتان طرفي الأنبوب (ends of the pipe) الذي لا تستخدمانه. هذه ليست مجرد عملية تكميلية لأن طرف القراءة الخاص بالأنبوب لن يُولّد شرط نهاية الملف إن كان هناك مجرى كتابة مفتوح مرتبط بالأنبوب. في حالة العملية الأب (parent process)، لن تعود rd.read
أبدًا إلا بعد إصدار wr.close
.
rd, wr = IO.pipe
if fork
wr.close
puts "Parent got: <#{rd.read}>"
rd.close
Process.wait
else
rd.close
puts "Sending message to parent"
wr.write "Hi Dad"
wr.close
end
ناتج تنفيذ هذا المثال هو:
Sending message to parent
Parent got: <Hi Dad>
انظر أيضًا
- التابع
new
: ينشئ كائنًا جديدًا من النوعIO
. - التابع
open
: يشبه التابعَnew
تمامًا عند استدعائه دون كتلة، أو يُمرّر الكائنIO
الذي جرى إنشاؤه كوسيط إلى الكتلة المعطاة ثم يعيد الناتج الذي تعيده الكتلة.
- التابع
popen
: ينفذ التعليمة المعطاة في عملية فرعية (subprocess).