التابع pipe
الخاص بالصنف IO
في روبي
ينشئ التابع pipe
زوجًا من مداخل الأنابيب (pipe endpoints) (متصلة ببعضها البعض) ثم يعيدها على هيئة مصفوفة ثنائية من مجريات د/خ IO
: [
read_io
و write_io
]
.
في حال إعطاء كتلة، ستُسدعى تلك الكتلة، وستعاد قيمتها. تُمرّر read_io
و write_io
كوسائط إلى الكتلة. في حال عدم إغلاق read_io و write_io عند خروج الكتلة، فسيتم إغلاقها. أي أن إغلاق read_io و/أو write_ لا يتسبب في حدوث خطأ.
التابع pipe
غير متوفر في جميع أنظمة التشغيل.
إذا تم تحديد ترميز معين (اسم ترميز أو كائن ترميز) كوسيط اختياري، سيتم وسم السلسلة النصية المقروءة من الأنبوب () بذلك الترميز المحدد. إن كان الوسيط على هيئة علامتي ترميز مفصولتين بنقطتين رأسيتين ("A: B")، فستُحوّل السلسلة النصية المقروءة من الترميز A (الترميز الخارجي) إلى الترميز B (الترميز الداخلي)، ثم ستوسم بعلامة الترميز B. إذا تم تحديد وسيطين اختياريين، فيجب أن يكونا كائنات ترميز، أو أسماء ترميز، حيث أن أولهما يمثل الترميز الخارجي، وثانيهما يمثل الترميز الداخلي. إذا تم تحديد الترميز الخارجي والترميز الداخلي، فسيحدد الوسيط الاختياري opt (انظر فقرة البنية العامة) خيارات التحويل.
في المثال التالي، تغلق العمليتان طرفي الأنبوب (ends of the pipe) الذي لا تستخدمانه. هذه ليست مجرد عملية تجميلية. لن ينتج طرف القراءة الخاص بالأنبوب نهاية لحالة الملف إن كان هناك أي كاتب (writer) في الأنبوب لا يزال مفتوحًا. في حالة العملية الأم (parent process)، لن تعود rd.read
أبداً إذا لم تقم أولاً بإصدار wr.close
.
produces:
Sending message to parent
Parent got: <Hi Dad>
البنية العامة
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
"ext_enc:int_enc"
opt
خيارات
int_enc
...
القيمة المُعادة
أمثلة
مثال على استخدام التابع pipe
:
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
انظر أيضا
- التابع
open
: عند عدم تمرير كتلة، فسيكون التابعIO.open
مرادفاً للتابع::new
. أما في حال تمرير الكتلة البرمجية، فسيُمرّر إليهاio
(انظر فقرة البنية العامة) كوسيط، وسيتم إغلاق مجرى د/خ (IO
) تلقائيًا عند إنهاء الكتلة. في هذه الحالة، سيعيد التابع::open
قيمة الكتلة. - التابع
popen
: ينفذ التابعpopen
التعليمة المعطاة (انظر فقرة البنية العامة) على شكل عملية فرعي (subprocess)؛ سيتم توصيل المدخلات والمخرجات القياسية للعملية الفرعية إلى مجرى د/خ (IO
) المُعاد.