الفرق بين المراجعتين لصفحة: «Ruby/IO/pipe»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>pipe</code> الخاص بالصنف <code>IO</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف: Ru...' |
لا ملخص تعديل |
||
سطر 3: | سطر 3: | ||
[[تصنيف: Ruby Method]] | [[تصنيف: Ruby Method]] | ||
[[تصنيف: Ruby IO]] | [[تصنيف: Ruby IO]] | ||
ينشئ التابع <code>pipe</code> زوجًا من | ينشئ التابع <code>pipe</code> زوجًا من أطراف الأنابيب (pipe endpoints) (متصلة ببعضها البعض) ثم يعيدها على هيئة [[Ruby/Array|مصفوفة]] ثنائية من [[Ruby/IO|مجريات د/خ]]: <code>[ ''read_io'', ''write_io'' ].</code> | ||
في حال إعطاء كتلة، ستُسدعى تلك الكتلة، | في حال إعطاء كتلة، ستُسدعى تلك الكتلة، وتعاد قيمتها، مع تمرير <code>read_io</code> و <code>write_io</code> كوسائط إليها. وسيتم إغلاق <code>read_io</code> و <code>write_io</code> إن لم يغلقا عند خروج الكتلة. أي أن إغلاق <code>read_io</code> و/أو <code>write_io</code> لا يتسبب في حدوث خطأ. | ||
التابع <code>pipe</code> غير متوفر في جميع أنظمة التشغيل. | التابع <code>pipe</code> غير متوفر في جميع أنظمة التشغيل. | ||
إذا تم تحديد ترميز معين (اسم ترميز أو كائن ترميز) كوسيط اختياري، | إذا تم تحديد ترميز معين (اسم ترميز أو كائن ترميز) كوسيط اختياري، فسيتم وسم [[Ruby/String|السلسلة النصية]] المقروءة من الأنبوب (pipe) بذلك الترميز. وإن كان الوسيط على هيئة علامتي ترميز مفصولتين بنقطتين رأسيتين ("<code>A:B</code>")، فستُحوّل [[Ruby/String|السلسلة النصية]] المقروءة من الترميز <code>A</code> (الترميز الخارجي) إلى الترميز <code>B</code> (الترميز الداخلي)، ثم ستوسم بعلامة <code>B</code>. إذا تم تحديد وسيطين اختياريين، فيجب أن يكونا كائني ترميز، أو أسماء ترميز، بحيث يمثل أولهما الترميز الخارجي، ويمثل ثانيهما الترميز الداخلي. إذا تم تحديد الترميز الخارجي والترميز الداخلي، فسيحدد الوسيط الاختياري <code>opt</code> (انظر فقرة البنية العامة) خيارات التحويل. | ||
==البنية العامة== | ==البنية العامة== | ||
<syntaxhighlight lang="ruby">pipe → [read_io, write_io] | <syntaxhighlight lang="ruby">pipe → [read_io, write_io] | ||
سطر 27: | سطر 18: | ||
==المعاملات== | ==المعاملات== | ||
===<code>ext_enc</code>=== | ===<code>ext_enc</code>=== | ||
الترميز الخارجي | |||
===<code>opt</code>=== | ===<code>opt</code>=== | ||
خيارات | خيارات | ||
===<code>int_enc</code>=== | ===<code>int_enc</code>=== | ||
الترميز الداخلي | |||
==القيمة المُعادة== | ==القيمة المُعادة== | ||
تعاد [[Ruby/Array|مصفوفة]] ثنائية من [[Ruby/IO|مجريات د/خ]]: | |||
==أمثلة== | ==أمثلة== | ||
في المثال التالي، تغلق العمليتان طرفي الأنبوب (ends of the pipe) الذي لا تستخدمانه. هذه ليست مجرد عملية تكميلية. لأن طرف القراءة الخاص بالأنبوب لن يُولد شرط نهاية الملف إن كان هناك مجرى كتابة (writer) مفتوح مرتبط بالأنبوب. في حالة العملية الأم (parent process)، لن تعود <code>rd.read</code> أبداً إلا بعد إصدار <code>wr.close</code>. | |||
<syntaxhighlight lang="ruby">rd, wr = IO.pipe | <syntaxhighlight lang="ruby">rd, wr = IO.pipe | ||
if fork | if fork | ||
سطر 46: | سطر 41: | ||
wr.write "Hi Dad" | wr.write "Hi Dad" | ||
wr.close | wr.close | ||
end</syntaxhighlight> | end</syntaxhighlight>الناتج:<syntaxhighlight lang="ruby">Sending message to parent | ||
Parent got: <Hi Dad></syntaxhighlight> | |||
==انظر أيضا== | ==انظر أيضا== | ||
* التابع <code>[[Ruby/IO/popen|popen]]</code>: ينفذ التابع <code>popen</code> التعليمة المعطاة في عملية فرعية (subprocess)؛ | |||
* التابع <code>[[Ruby/IO/popen|popen]]</code>: ينفذ التابع <code>popen</code> التعليمة المعطاة | |||
==مصادر== | ==مصادر== | ||
*[http://ruby-doc.org/core-2.5.1/IO.html#method-c-pipe قسم التابع pipe في الصنف IO في توثيق روبي الرسمي.] | *[http://ruby-doc.org/core-2.5.1/IO.html#method-c-pipe قسم التابع pipe في الصنف IO في توثيق روبي الرسمي.] |
مراجعة 23:07، 12 نوفمبر 2018
ينشئ التابع pipe
زوجًا من أطراف الأنابيب (pipe endpoints) (متصلة ببعضها البعض) ثم يعيدها على هيئة مصفوفة ثنائية من مجريات د/خ: [ read_io, write_io ].
في حال إعطاء كتلة، ستُسدعى تلك الكتلة، وتعاد قيمتها، مع تمرير read_io
و write_io
كوسائط إليها. وسيتم إغلاق read_io
و write_io
إن لم يغلقا عند خروج الكتلة. أي أن إغلاق read_io
و/أو write_io
لا يتسبب في حدوث خطأ.
التابع pipe
غير متوفر في جميع أنظمة التشغيل.
إذا تم تحديد ترميز معين (اسم ترميز أو كائن ترميز) كوسيط اختياري، فسيتم وسم السلسلة النصية المقروءة من الأنبوب (pipe) بذلك الترميز. وإن كان الوسيط على هيئة علامتي ترميز مفصولتين بنقطتين رأسيتين ("A:B
")، فستُحوّل السلسلة النصية المقروءة من الترميز A
(الترميز الخارجي) إلى الترميز B
(الترميز الداخلي)، ثم ستوسم بعلامة B
. إذا تم تحديد وسيطين اختياريين، فيجب أن يكونا كائني ترميز، أو أسماء ترميز، بحيث يمثل أولهما الترميز الخارجي، ويمثل ثانيهما الترميز الداخلي. إذا تم تحديد الترميز الخارجي والترميز الداخلي، فسيحدد الوسيط الاختياري 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
الترميز الخارجي
opt
خيارات
int_enc
الترميز الداخلي
القيمة المُعادة
تعاد مصفوفة ثنائية من مجريات د/خ:
أمثلة
في المثال التالي، تغلق العمليتان طرفي الأنبوب (ends of the pipe) الذي لا تستخدمانه. هذه ليست مجرد عملية تكميلية. لأن طرف القراءة الخاص بالأنبوب لن يُولد شرط نهاية الملف إن كان هناك مجرى كتابة (writer) مفتوح مرتبط بالأنبوب. في حالة العملية الأم (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>
انظر أيضا
- التابع
popen
: ينفذ التابعpopen
التعليمة المعطاة في عملية فرعية (subprocess)؛