الفرق بين المراجعتين ل"Ruby/Kernel/open"
(أنشأ الصفحة ب'<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>) ، فسيُعامل باعتباره اسم الملف المراد فتحه باستخدام الوضع المحدد (افتراضيًا "<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>. | |
− | < | ||
− | |||
− | + | في حالة إنشاء ملف، قد تُعيّن أذوناته الأولية باستخدام الوسيط <code>perm</code>. انظر <code>[[Ruby/File/new|File.new]]</code> وصفحات <code>open(2)</code> و <code>chmod(2)</code> لمزيد من المعلومات حول الأذونات. | |
− | < | ||
− | |||
− | + | في حال إعطاء كتلة، فستُسدعى بتمرير كائن <code>IO</code> كوسيط، والذي سيُغلق تلقائيًا عند إنهاء الكتلة. ثم ستعاد قيمة الكتلة. | |
− | < | + | |
+ | إذا بُدئ الوسيط <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>testfile</code>": | ||
<syntaxhighlight lang="ruby">open("testfile") do |f| | <syntaxhighlight lang="ruby">open("testfile") do |f| | ||
print f.gets | print f.gets | ||
− | + | 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/ | + | * التابع <code>[[Ruby/Kernel/fork|fork]]</code>: ينشئ التابع <code>fork</code> عملية فرعية (subprocess). |
− | |||
==مصادر== | ==مصادر== | ||
*[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).