الفرق بين المراجعتين ل"Ruby/Kernel/open"

من موسوعة حسوب
< Ruby‏ | Kernel
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>open‎</code> الخاص بالصنف <code>Kernel</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف...')
 
سطر 3: سطر 3:
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Kernel]]
 
[[تصنيف: Ruby Kernel]]
ينشئ التابع open كائنًا من النوع <code>IO</code> متصلا بالمجرى أو الملف أو العملية الفرعية (subprocess) المحددة.
+
ينشئ التابع <code>open</code> كائنًا من النوع <code>IO</code> متصلا بالمجرى أو الملف أو العملية الفرعية (subprocess) المحددة.
إذا لم يبدأ <code>path</code> بشرطة عمودية (<code>|</code>) ، فسيُعامل كاسم الملف المراد فتحه باستخدام الوضع المحدد (افتراضيًا "r").
 
<code>mode</code> هو إما سلسلة نصية أو عدد صحيح.  إن كان عددًا صحيحًا، فيجب أن يكون عبارة عن bitwise-or لراية open(2)، مثل File :: RDWR أو File :: EXCL.  أما إذا كان سلسلة نصية، فهو إما "fmode" أو "fmode: ext_enc" أو "fmode: ext_enc: int_enc".
 
راجع توثيق <code>IO.new</code> لمزيد من المعلومات حول موجّهات <code>mode</code>.
 
في حالة إنشاء ملف، قد تُعيّن أذوناته الأولية باستخدام الوسيط <code>perm</code>.  انظر <code>File.new</code> وصفحات open(2) و chmod(2) لمزيد من المعلومات حول للأذونات.
 
في حال إعطاء كتلة، فستسدعى بتمرير كائن <code>IO</code> كوسيط، وسيُغلق <code>IO</code> تلقائيًا عند إنهاء الكتلة.  وستعاد قيمة الكتلة.
 
إذا بُدئت <code>path</code> بشرطة عمودية (<code>"|"</code>) ، فسيتم إنشاء عملية فرعية، متصلة بالمُستدعي (caller) بواسطة زوج من الأنابيب (pipes).  يمكن استخدام كائن <code>IO</code> المُعاد للكتابة في مجرى الإدخال القياسي والقراءة من مجرى الإخراج القياسي لهذه العملية الفرعية.
 
إذا أعقُبت الشرطة العمودية بعلامة ناقص واحدة (<code>"|-"</code>) ، فستنشئ روبي عملية فرعية جديدة، والتي ستكون متصلة بالعملية الأم.  أما إذا لم يكن الأمر هو <code>"-"</code>، فستنفذ العملية الفرعية الأمر.
 
عندما تكون العملية الفرعية هي Ruby (مفتوحة عبر <code>"|-"</code>) ، استدعاء <code>open</code> سيعيد <code>nil</code>.  في حال تمرير كتلة عند استدعاء open، فستنفذ الكتلة مرتين - مرة في العملية الأم ومرة في العملية الفرعية.
 
الوسيط block سيكون كائنًا <code>IO</code> في العملية الأم و <code>nil</code> في العملية الفرعية. سيتم ريط أب (parent') الكائن <code>IO</code> ب $stdin و $stdout..  سيتم إنهاء العملية الفرعية في نهاية الكتلة.
 
أمثلة <code>¶</code> <code>↑</code>
 
القراءة من الملف "testfile":
 
  
الناتج:
+
إذا لم يبدأ الوسيط <code>path</code> (انظر فقرة البنية العامة) بشرطة عمودية (<code>|</code>) ، فسيُعامل باعتباره اسم الملف المراد فتحه باستخدام الوضع المحدد (افتراضيًا "<code>r</code>").
  
افتح عملية فرعية وقراءة ناتجها:
+
الوسيط <code>mode</code> هو إما سلسلة نصية أو عدد صحيح.  إن كان عددًا صحيحًا، فيجب أن يكون عبارة عن bitwise-or لرايات <code>open(2)‎</code>، مثل <code>File:: RDWR</code> أو <code>File::EXCL</code>.  أما إذا كان سلسلة نصية، فسيكون إما "<code>fmode</code>" أو "<code>fmode: ext_enc</code>" أو "<code>fmode: ext_enc: int_enc</code>".
  
الناتج:
+
راجع توثيق <code>[[Ruby/IO/new|IO.new]]</code> لمزيد من المعلومات حول موجّهات <code>mode</code>.
<syntaxhighlight lang="ruby">Wed Apr  9 08:56:31 CDT 2003‎</syntaxhighlight>
 
افتح عملية فرعية تُشغّل نفس برنامج Ruby:
 
  
الناتج:
+
في حالة إنشاء ملف، قد تُعيّن أذوناته الأولية باستخدام الوسيط <code>perm</code>.  انظر <code>[[Ruby/File/new|File.new]]</code> وصفحات <code>open(2)‎</code> و <code>chmod(2)‎</code> لمزيد من المعلومات حول الأذونات.
<syntaxhighlight lang="ruby">Got: in Child‎</syntaxhighlight>
 
افتح عملية فرعية باستخدام كتلة لاستلام كائن <code>IO</code>:
 
  
الناتج:
+
في حال إعطاء كتلة، فستُسدعى بتمرير كائن <code>IO</code> كوسيط، والذي سيُغلق تلقائيًا عند إنهاء الكتلة.  ثم ستعاد قيمة الكتلة.
<syntaxhighlight lang="ruby">Got: in Child‎</syntaxhighlight>
+
 
 +
إذا بُدئ الوسيط <code>path</code> بشرطة عمودية (<code>"|"</code>) ، فسيتم إنشاء عملية فرعية (subprocess)، متصلة بالمُستدعي (caller) بواسطة زوج من الأنابيب (pipes).  يمكن استخدام كائن <code>IO</code> المُعاد لأجل الكتابة في مجرى الإدخال القياسي، أو القراءة من مجرى الإخراج القياسي لهذه العملية الفرعية.
 +
 
 +
إذا أُعقبت الشرطة العمودية بعلامة ناقص واحدة (<code>"|-"</code>) ، فستنشئ روبي عملية فرعية جديدة، والتي ستكون متصلة بالعملية الأم.  أما إذا لم يكن الأمر (command) يساوي<code>"-"</code>، فستنفذ العملية الفرعية الأمر.
 +
 
 +
إذا كانت العملية الفرعية هي  Ruby (مفتوحة عبر <code>"|-"</code>) ، استدعاء <code>open</code> سيعيد <code>nil</code>.  وفي حال تمرير كتلة عند استدعاء <code>open</code>، فستنفذ الكتلة مرتين - مرة في العملية الأم ومرة في العملية الفرعية.
 +
 
 +
الوسيط <code>block</code> سيكون كائنًا <code>IO</code> في العملية الأم و <code>nil</code> في العملية الفرعية. سيتم ريط أب (parent) الكائن <code>IO</code> ب <code>‎$stdin</code> و <code>‎$stdout</code>. سيتم إنهاء العملية الفرعية في نهاية الكتلة.
 
==البنية العامة==
 
==البنية العامة==
 
<syntaxhighlight lang="ruby">open(path [, mode [, perm]] [, opt]) → io or nil
 
<syntaxhighlight lang="ruby">open(path [, mode [, perm]] [, opt]) → io or nil
سطر 35: سطر 27:
 
==المعاملات==
 
==المعاملات==
 
===<code>path‎</code>===
 
===<code>path‎</code>===
 +
مُوجّه.
  
 
===<code>mode‎</code>===
 
===<code>mode‎</code>===
 +
مُوجه.
  
 
===<code>perm‎</code>===
 
===<code>perm‎</code>===
 +
يعيّن الأذونات الأولية.
  
 
===<code>opt‎</code>===
 
===<code>opt‎</code>===
  
 
+
يحدد الخيارات.
 
==القيمة المُعادة==
 
==القيمة المُعادة==
 +
يعيد التابع <code>open</code> كائنًا من النوع <code>IO</code> متصلا بالمجرى أو الملف أو العملية الفرعية المحددة. وإذا كانت العملية الفرعية هي  Ruby ، سيعيد <code>nil</code>
  
 
==أمثلة==
 
==أمثلة==
مثال على استخدام التابع <code>open‎</code>:
+
أمثلة على استخدام التابع <code>open‎</code>:
 +
 
 +
=== المثال الأول ===
 +
القراءة من الملف "<code>testfile</code>":
 
<syntaxhighlight lang="ruby">open("testfile") do |f|
 
<syntaxhighlight lang="ruby">open("testfile") do |f|
 
   print f.gets
 
   print f.gets
end‎</syntaxhighlight>
+
end</syntaxhighlight>الناتج:<syntaxhighlight lang="ruby">This is line one
 +
</syntaxhighlight>
 +
 
 +
=== المثال الثاني ===
 +
فتح عملية فرعية وقراءة ناتجها:<syntaxhighlight lang="ruby">cmd = open("|date")
 +
print cmd.gets
 +
cmd.close
 +
</syntaxhighlight>الناتج:<syntaxhighlight lang="ruby">Wed Apr  9 08:56:31 CDT 2003‎</syntaxhighlight>
 +
 
 +
=== المثال الثالث ===
 +
فتح عملية فرعية تُشغّل نفس برنامج Ruby:<syntaxhighlight lang="ruby">f = open("|-", "w+")
 +
if f.nil?
 +
  puts "in Child"
 +
  exit
 +
else
 +
  puts "Got: #{f.gets}"
 +
end</syntaxhighlight>
 +
الناتج:<syntaxhighlight lang="ruby">Got: in Child‎</syntaxhighlight>
 +
 
 +
=== المثال الرابع ===
 +
فتح عملية فرعية باستخدام كتلة لاستلام كائن <code>IO</code>:<syntaxhighlight lang="ruby">open "|-" do |f|
 +
  if f then
 +
    # parent process
 +
    puts "Got: #{f.gets}"
 +
  else
 +
    # child process
 +
    puts "in Child"
 +
  end
 +
end</syntaxhighlight>
 +
الناتج:<syntaxhighlight lang="ruby">Got: in Child‎</syntaxhighlight>
 
==انظر أيضا==
 
==انظر أيضا==
* التابع <code>[[Ruby/Kernel/loop|loop]]</code>: ينفذ التابع loop الكتلة البرمجية بشكل متكرر.
+
* التابع <code>[[Ruby/Kernel/fork|fork]]</code>: ينشئ التابع <code>fork</code>  عملية فرعية (subprocess).  
* التابع <code>[[Ruby/Kernel/p|p]]</code>: يكتب التابع p لكل كائن يُمرر إليه ناتج التعبير يكتب مباشرة .<code>inspect</code>، متبوعًا بسطر جديد في مجرى الإخراج القياسي للبرنامج.
 
  
 
==مصادر==
 
==مصادر==
 
*[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-open قسم  التابع open‎ في الصنف Kernel‎ في توثيق روبي الرسمي.]
 
*[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-open قسم  التابع open‎ في الصنف Kernel‎ في توثيق روبي الرسمي.]

مراجعة 11:04، 22 أكتوبر 2018

ينشئ التابع 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 كوسيط، والذي سيُغلق تلقائيًا عند إنهاء الكتلة. ثم ستعاد قيمة الكتلة.

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

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

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

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

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

open(path [, mode [, perm]] [, opt])  io or nil
open(path [, mode [, perm]] [, opt]) {|io| block }   obj

المعاملات

path‎

مُوجّه.

mode‎

مُوجه.

perm‎

يعيّن الأذونات الأولية.

opt‎

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

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

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

أمثلة

أمثلة على استخدام التابع open‎:

المثال الأول

القراءة من الملف "testfile":

open("testfile") do |f|
  print f.gets
end

الناتج:

This is line one

المثال الثاني

فتح عملية فرعية وقراءة ناتجها:

cmd = open("|date")
print cmd.gets
cmd.close

الناتج:

Wed Apr  9 08:56:31 CDT 2003

المثال الثالث

فتح عملية فرعية تُشغّل نفس برنامج Ruby:

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: ينشئ التابع fork  عملية فرعية (subprocess).

مصادر