الفرق بين المراجعتين لصفحة: «Ruby/IO»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) مراجعة وتدقيق. |
||
(6 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: | <noinclude>{{DISPLAYTITLE:الصنف <code>IO</code> في روبي}}</noinclude> | ||
[[تصنيف: Ruby]] | [[تصنيف: Ruby]] | ||
[[تصنيف: Ruby Class]] | |||
[[تصنيف: Ruby IO]] | [[تصنيف: Ruby IO]] | ||
الصنف <code>IO</code> هو أساس كل عمليات الإدخال والإخراج في روبي. مجرى | الصنف <code>IO</code> هو أساس كل عمليات الإدخال والإخراج في روبي. مجرى الدخل/الخرج (I/O stream) قد يكون مزدوج الاتجاه (duplexed، أي في اتجاهين)، وبذلك قد يُستخدَم أكثر من مجرى واحد من مجاري نظام التشغيل. | ||
الكثير من الأمثلة الواردة في في هذا القسم تستخدم الصنف <code>[[Ruby/File|File]]</code>، وهو االصنف الفرعي (subclass) القياسي الوحيد للصنف <code>IO</code> | الكثير من الأمثلة الواردة في في هذا القسم تستخدم الصنف <code>[[Ruby/File|File]]</code>، وهو االصنف الفرعي (subclass) القياسي الوحيد للصنف <code>IO</code>، إذ يرتبط الصنفان ارتباطًا وثيقًا. | ||
مثل | مثل الصنف [[Ruby/File|<code>File</code>]]، فإنّ المكتبة Socket تشتق أصنافًا فرعيةً من الصنف <code>IO</code> (مثل <code>TCPSocket</code> أو <code>UDPSocket</code>). | ||
يمكن أن ينشئ التابع <code>[[Ruby/Kernel/open|Kernel | يمكن أن ينشئ التابع <code>[[Ruby/Kernel/open|Kernel.open]]</code> كائنات من الصنف <code>IO</code> (أو <code>[[Ruby/File|File]]</code>) من أنواع الوسائط التالية: | ||
* [[Ruby/String|سلسلة نصية]] لتمثيل اسم ملف مناسب لنظام التشغيل المستخدم. | *[[Ruby/String|سلسلة نصية]] لتمثيل اسم ملف مناسب لنظام التشغيل المستخدم. | ||
* [[Ruby/String|سلسلة نصية]] تبدأ بالمحرف <code>"|"</code> كناية عن عملية فرعية (subprocess). يتم استدعاء الجزء | *[[Ruby/String|سلسلة نصية]] تبدأ بالمحرف <code>"|"</code> كناية عن عملية فرعية (subprocess). يتم استدعاء الجزء الذي يلي المحرف <code>"|"</code> من [[Ruby/String|السلسلة النصية]] [[Ruby/Process|كعملية]] (process)؛ هذه العملية ستكون متصلة بقنوات الدخل/الخرج (د/خ) المناسبة. | ||
* إن كانت [[Ruby/String|السلسلة النصية]] تساوي <code>"|-"</code>، فسيتم إنشاء نسخة (instance) أخرى من روبي كعملية فرعية. | *إن كانت [[Ruby/String|السلسلة النصية]] تساوي <code>"|-"</code>، فسيتم إنشاء نسخة (instance) أخرى من روبي كعملية فرعية. | ||
يمكن فتح مجرى د/خ (<code>IO</code>) مع مختلف أوضاع الملفات ( | يمكن فتح مجرى د/خ (<code>IO</code>) مع مختلف أوضاع الملفات (مثل وضع القراءة فقط [read-only] أو الكتابة فقط [write-only]) ووفق الترميزات المناسبة لأجل إجراء عمليات التحويل. انظر صفحة التابع <code>[[Ruby/IO/new|new]]</code> للتعرف على هذه الخيارات، وانظر صفحة <code>[[Ruby/Kernel/open|Kernel.open]]</code> لمزيد من التفاصيل حول مختلف تنسيقات الأوامر المذكورة أعلاه. | ||
يمكن أيضًا استخدام التابع <code>[[Ruby/IO/popen|popen]]</code> أو المكتبة <code>Open3</code> أو <code>[[Ruby/Process/spawn|Process | يمكن أيضًا استخدام التابع <code>[[Ruby/IO/popen|popen]]</code> أو المكتبة <code>Open3</code> أو التابع <code>[[Ruby/Process/spawn|Process.spawn]]</code> للتواصل مع العمليات الفرعية عبر مجرى د/خ. | ||
ستُحول روبي أسماء المسارات بما يتوافق مع | ستُحول روبي أسماء المسارات بما يتوافق مع نظام التشغيل المستخدم إن أمكن. على سبيل المثال، في نظام ويندوز، سيُفتح اسم الملف <code>"/gumby/ruby/test.rb"</code> باعتباره <code>"\gumby\ruby\test.rb"</code>. | ||
عند تحديد اسم ملف بنمط ويندوز في [[Ruby/String|سلسلة نصية]]، تذكر أن تهرِّب (escape) الخطوط المائلة العكسية مثل:<syntaxhighlight lang="ruby">"C:\\gumby\\ruby\\test.rb"</syntaxhighlight>سوف نستخدم في الأمثلة الموجودة في صفحات التوابع الخطوط المائلة للأمام على نمط اليونيكس؛ يمكن الحصول على المحرف الفاصل للمجلدات في المسارات الخاص بنظام التشغيل عبر الثابت <code>[[Ruby/File#ALT SEPARATOR|File::ALT_SEPARATOR]]</code>. | |||
يوفر الثابت العام <code>[[Ruby/ARGF|ARGF]]</code> (يمكن الوصول إليه عبر <code>$<</code>) مجرًى مشابهًا لمجرى د/خ (I/O)، والذي يسمح بالوصول إلى كافة الملفات المذكورة في سطر الأوامر (أو في المجرى <code>STDIN</code> في حال لم يذكر أي ملف). يمكن استخدام التابع <code>[[Ruby/ARGF/path|ARGF.path]]</code> وبديله <code>[[Ruby/ARGF/filename|ARGF.filename]]</code> للوصول إلى اسم الملف الذي تتم قراءته حاليًا. | |||
<code>[[Ruby// | ==الملحقة io/console== | ||
توفر الملحقة io/console توابع للتفاعل مع وحدة التحكم (console). يمكن الوصول إلى وحدة التحكم (أو الطرفية) عبر التابع <code>IO.console</code>، أو من مجاري الدخل والخرج القياسية التي هي <code>input</code> و <code>output</code> و <code>error</code>. | |||
توفر الملحقة io/console توابع للتفاعل مع وحدة التحكم (console). يمكن الوصول إلى وحدة التحكم | |||
استيراد io/console يؤدي إلى إضافة التوابع التالية: | استيراد io/console يؤدي إلى إضافة التوابع التالية: | ||
*<code>IO::console</code> | |||
*<code>IO#raw</code> | |||
*<code>IO#raw!</code> | |||
*<code>IO#cooked</code> | |||
*<code>IO#cooked!</code> | |||
*<code>IO#getch</code> | |||
*<code>IO#echo=</code> | |||
*<code>IO#echo?</code> | |||
*<code>IO#noecho</code> | |||
*<code>IO#winsize</code> | |||
*<code>IO#winsize=</code> | |||
*<code>IO#iflush</code> | |||
*<code>IO#ioflush</code> | |||
*<code>IO#oflush</code> | |||
إليك المثال التالي حول استدعاء الملحقة io/console وإضافتها لاستعمال التابع <code>winsize</code>:<syntaxhighlight lang="ruby">require 'io/console' | |||
rows, columns = $stdout.winsize | |||
puts "Your screen is #{columns} wide and #{rows} tall"</syntaxhighlight> | |||
== الثوابت == | |||
IO | === <code>EWOULDBLOCKWaitReadable</code> === | ||
اطلع على صفحة الصنف <code>[[Ruby/IO::EAGAINWaitReadable|IO::EAGAINWaitReadable]]</code>. | |||
IO | === <code>EWOULDBLOCKWaitWritable</code> === | ||
اطلع على صفحة الصنف <code>[[Ruby/IO::EAGAINWaitWritable|IO::EAGAINWaitWritable]]</code>. | |||
=== <code>SEEK_CUR</code> === | |||
يضبط موضع مؤشِّر عملية الدخل والخرج بدءًا من الموضع الحالي له. | |||
=== <code>SEEK_DATA</code> === | |||
يضبط موضع مؤشِّر عملية الدخل والخرج إلى الموقع التالي الذي يحتوي على البيانات. | |||
=== <code>SEEK_END</code> === | |||
يضبط موضع مؤشِّر عملية الدخل والخرج بدءًا من النهاية. | |||
=== <code>SEEK_HOLE</code> === | |||
يضبط موضع مؤشِّر عملية الدخل والخرج إلى الفجوة التالية. | |||
=== <code>SEEK_SET</code> === | |||
يضبط موضع مؤشِّر عملية الدخل والخرج بدءًا من البداية. | |||
IO | ==توابع الصنف العامة== | ||
===[[Ruby/IO/binread|<code>binread</code>]]=== | |||
يفتح الملف ثم يحرِّك موضع المؤشر بمقدار محدد (في حال إعطائه) ثم يجلب جميع محتوى الملف بدءًا من موضع المؤشر وحتى نهاية الملف أو يجلب حجم محدَّد من البيانات. | |||
===[[Ruby/IO/binwrite|<code>binwrite</code>]]=== | |||
يشبه التابع <code>[[Ruby/IO/write|write]]</code> باستثناء أنه يفتح الملف في الوضع الثنائي (binary mode) وبالترميز ASCII-8BIT. | |||
IO | ===[[Ruby/IO/copy stream|<code>copy_stream</code>]]=== | ||
ينسخ بيانات من مجرى إلى مجرى آخر. | |||
===[[Ruby/IO/for fd|<code>for_fd</code>]]=== | |||
يعد مرادفًا للتابع <code>[[Ruby/IO/new|new]]</code>. | |||
===[[Ruby/IO/foreach|<code>foreach</code>]]=== | |||
ينفذ الكتلة المعطاة على كل سطر في منفذ مجرى د/خ المسمى. | |||
===[[Ruby/IO/new|<code>new</code>]]=== | |||
ينشئ كائنًا جديدًا من النوع <code>IO</code>. | |||
===[[Ruby/IO/open|<code>open</code>]]=== | |||
يشبه التابعَ <code>[[Ruby/IO/new|new]]</code> تمامًا عند استدعائه دون كتلة، أو يُمرّر الكائن <code>IO</code> الذي جرى إنشاؤه كوسيط إلى الكتلة المعطاة ثم يعيد الناتج الذي تعيده الكتلة. | |||
===[[Ruby/IO/pipe|<code>pipe</code>]]=== | |||
ينشئ زوجًا من طرفي أنبوب (pipe endpoints) متصلين ببعضهما بعضًا ثم يعيدهما على هيئة [[Ruby/Array|مصفوفة]] من الكائنات <code>IO</code>. | |||
===[[Ruby/IO/popen|<code>popen</code>]]=== | |||
ينفذ الأمر المعطى كعملية فرعية (subprocess) مع توصيل المجرَيَين القياسيين للدخل والخرج للعملية الفرعية مع المجرى <nowiki/><code>IO</code> المُعاد. | |||
===[[Ruby/IO/read|<code>read</code>]]=== | |||
يقرأ ملفًا محددًا بعد فتحه ثم يغلقه قبل إعادة الناتج. | |||
===[[Ruby/IO/readlines|<code>readlines</code>]]=== | |||
يقرأ ملفًا بأكمله سطرًا سطرًا ثم يعيد تلك الأسطر في [[Ruby/Array|مصفوفة]]. | |||
===[[Ruby/IO/select|<code>select</code>]]=== | |||
يستدعي استدعاء النظام <code>select(2)</code>. ويراقب [[Ruby/Array|المصفوفة]] المعطاة المكونة من مجاري د/خ (كائنات <code>IO</code>)، وينتظر حتى يكون واحد أو أكثر من تلك المجاري جاهزًا للقراءة، وجاهزًا للكتابة، ويكون له استثناءات معلقة (pending exceptions) على التوالي، ثم يعيد [[Ruby/Array|مصفوفة]] مؤلفة من [[Ruby/Array|مصفوفات]] مكونة من تلك المجاري. | |||
===[[Ruby/IO/sysopen|<code>sysopen</code>]]=== | |||
يفتح الملف الموجود في المسار المحدد، ثم يعيد واصف الملف الأساسي ك[[Ruby/Integer|عدد صحيح]]. | |||
===[[Ruby/IO/try convert|<code>try_convert</code>]]=== | |||
يحاول تحويل الكائن المُمرَّر إليه إلى مجرى د/خ باستخدام التابع <code>[[Ruby/IO/to io|to_io]]</code>. | |||
===[[Ruby/IO/write|<code>write</code>]]=== | |||
يفتح ملفًا محدَّدًا ويكتب فيه السلسلة النصية المُمرَّرة إليه ثم يغلقه ويعيد عدد البايتات التي كتبها. | |||
== توابع النسخة العامة (Public Instance Methods) == | |||
IO | ===[[Ruby/IO/left shift|<code><<</code>]]=== | ||
يكتب كائنًا في المجرى <code>IO</code> المعطى. | |||
===[[Ruby/IO/advise|<code>advise</code>]]=== | |||
يعلن عن نية الوصول إلى بيانات الملف الحالي وفق نمط محدد. | |||
===[[Ruby/IO/autoclose-3D|<code>autoclose</code>]]=== | |||
يُعيّن عند استدعائه بالشكل <code>autoclose = bool</code> قيمة راية الإغلاق التلقائي (auto-close flag) إلى القيمة <code>bool</code> المنطقية. | |||
===[[Ruby/IO/autoclose-3F|<code>autoclose?</code>]]=== | |||
يتحقق إن كان واصف الملف الأساسي لمجرى معين سيُغلق تلقائيًا عند الانتهاء منه. | |||
===[[Ruby/IO/binmode|<code>binmode</code>]]=== | |||
يجعل مجرى د/خ في الوضع الثنائي (binary mode). | |||
===[[Ruby/IO/binmode-3F|<code>binmode?</code>]]=== | |||
يتحقق إن كان مجرى د/خ في الوضع الثنائي (binary mode). | |||
===[[Ruby/IO/bytes|<code>bytes</code>]]=== | |||
يعد اسمًا بديلًا مهملًا للتابع <code>[[Ruby/IO/each byte|each_byte]]</code>. | |||
IO | ===[[Ruby/IO/chars|<code>chars</code>]]=== | ||
يعد اسمًا بديلًا مهملًا للتابع <code>[[Ruby/IO/each char|each_char]]</code>. | |||
IO | ===[[Ruby/IO/close|<code>close</code>]]=== | ||
يغلق المجرى الذي استدعي معه ويرسل (flushes) أي كتابات مُعلّقة إلى نظام التشغيل. | |||
===[[Ruby/IO/close on exec-3D|<code>close_on_exec</code>]]=== | |||
يعين عند استدعائه بالشكل <code>close_on_exec = bool</code> قيمة الراية <code>close-on-exec</code> إلى القيمة <code>bool</code>. | |||
===[[Ruby/IO/close on exec-3F|<code>close_on_exec?</code>]]=== | |||
يتحقق إن كانت الراية <code>close-on-exec</code> الخاصة بالمجرى الذي استدعي معه مضبوطة إلى القيمة <code>true</code>. | |||
===[[Ruby/IO/close read|<code>close_read</code>]]=== | |||
يغلق طرف القراءة الخاص بمجرى د/خ مزدوج (duplex). | |||
===[[Ruby/IO/close write|<code>close_write</code>]]=== | |||
يغلق طرف الكتابة الخاص بمجرى د/خ مزدوج (duplex). | |||
===[[Ruby/IO/closed-3F|<code>closed?</code>]]=== | |||
يتحقق إن كان مجرى د/خ مغلقًا تمامًا. | |||
===[[Ruby/IO/codepoints|<code>codepoints</code>]]=== | |||
يعدُّ اسمًا بديلًا مهملًا للتابع <code>[[Ruby/IO/each codepoint|each_codepoint]]</code>. | |||
===[[Ruby/IO/each|<code>each</code>]]=== | |||
ينفذ الكتلة المعطاة على كل سطر في [[Ruby/IO|المجرى]] الذي استُدعي معه. | |||
===[[Ruby/IO/each byte|<code>each_byte</code>]]=== | |||
يستدعي الكتلة المعطاة على كل بايت (0..255) في المجرى الذي استدعي معه. | |||
===[[Ruby/IO/each char|<code>each_char</code>]]=== | |||
يستدعي الكتلة المعطاة على كل محرف في المجرى الذي استدعي معه. | |||
===[[Ruby/IO/each codepoint|<code>each_codepoint</code>]]=== | |||
يمرر كل عدد من الأعداد الترتيبية (Integer ordinal) لكل محرف من المحارف الموجودة في المجرى الذي استدعي معه إلى الكتلة المعطاة. | |||
===[[Ruby/IO/each line|<code>each_line</code>]]=== | |||
ينفذ الكتلة المعطاة على كل سطر في المجرى الذي استدعي معه. | |||
===[[Ruby/IO/eof|<code>eof</code>]]=== | |||
يتحقق إن وصل المجرى الذي استدعي معه إلى نهاية الملف. | |||
===[[Ruby/IO/eof-3F|<code>eof?</code>]]=== | |||
يتحقق إن وصل المجرى الذي استدعي معه إلى نهاية الملف. | |||
===[[Ruby/IO/external encoding|<code>external_encoding</code>]]=== | |||
يُعيد الكائن <nowiki/>[[Ruby/Encoding|<code>Encoding</code>]] الذي يمثل ترميز الملف للمجرى الذي استدعي معه. | |||
===[[Ruby/IO/fcntl|<code>fcntl</code>]]=== | |||
يوفر آلية لإصدار أوامر منخفضة المستوى للتحكم في أو الاستعلام عن <nowiki/>مجاري د/خ <nowiki/>الموجهة بالملفات (file-oriented I/O). | |||
===[[Ruby/IO/fdatasync|<code>fdatasync</code>]]=== | |||
يكتب مباشرةً جميع البيانات المخزنة في مجرى د/خ على القرص. | |||
===[[Ruby/IO/fileno|<code>fileno</code>]]=== | |||
يُعيد عددًا صحيحًا يمثل واصف الملف الرقمي للمجرى الذي استدعي معه. | |||
===[[Ruby/IO/flush|<code>flush</code>]]=== | |||
ينقل أي بيانات مخزَّنة في المجرى الذي استدعي معه إلى نظام التشغيل. | |||
===[[Ruby/IO/fsync|<code>fsync</code>]]=== | |||
يكتب مباشرةً جميع البيانات المخزنة في المجرى الذي استدعي معه على القرص. | |||
===[[Ruby/IO/getbyte|<code>getbyte</code>]]=== | |||
يجلب البايت التالي من المجرى الذي استدعي معه. | |||
===[[Ruby/IO/getc|<code>getc</code>]]=== | |||
يجلب محرفًا واحدًا من المجرى الذي استدعي معه. | |||
===[[Ruby/IO/gets|<code>gets</code>]]=== | |||
يجلب السطر التالي من المجرى الذي استدعي معه. | |||
===[[Ruby/IO/inspect|<code>inspect</code>]]=== | |||
يُعيد [[Ruby/String|سلسلة نصية]] تصف المجرى الذي استُدعي معه. | |||
===[[Ruby/IO/internal encoding|<code>internal_encoding</code>]]=== | |||
يعيد [[Ruby/Encoding|الترميز]] الخاص ب[[Ruby/String|السلسلة النصية]] الداخلية في حال تحديد التحويل. | |||
===[[Ruby/IO/ioctl|<code>ioctl</code>]]=== | |||
يوفر آلية لإصدار أوامر منخفضة المستوى للتحكم في أو الاستعلام عن أجهزة مجاري د/خ. | |||
===[[Ruby/IO/isatty|<code>isatty</code>]]=== | |||
يتحقق إن كان [[Ruby/IO|المجرى]] الذي استدعي معه مربوطًا بجهاز طرفي (tty). | |||
===[[Ruby/IO/lineno|<code>lineno</code>]]=== | |||
يعيد رقم السطر الحالي في [[Ruby/IO|المجرى]] الذي استدعي معه. يجب أن يكون المجرى مفتوحًا في وضعية القراءة. | |||
===[[Ruby/IO/lineno-3D|<code>lineno=</code>]]=== | |||
يعيّن عند استدعاءه بالشكل <code>lineno = integer</code> رقم السطر الحالي يدويًا إلى القيمة <code>integer</code>. | |||
===[[Ruby/IO/lines|<code>lines</code>]]=== | |||
مرادف مُتجاوز للتابع <code>[[Ruby/IO/each line|each_line]]</code>. | |||
===[[Ruby/IO/pid|<code>pid</code>]]=== | |||
يعيد معرف العملية (PID) الخاص بالعملية الفرعية (child process) المرتبطة بالمجرى الذي استدعي معه. | |||
===[[Ruby/IO/pos|<code>pos</code>]]=== | |||
يُعيد موضع المؤشر الحالي بدءًا من بداية الملف (بالبايت) [[Ruby/IO|للمجرى]] الذي استدعي معه. | |||
===[[Ruby/IO/pos-3D|<code>pos=</code>]]=== | |||
===[[Ruby/IO/ | يحرِّك عند استدعائه بالشكل <code>pos = integer</code> موضع المؤشر الحالي إلى الموضع integer (بالبايت) [[Ruby/IO|للمجرى]] الذي استدعي معه. | ||
===[[Ruby/IO/pread|<code>pread</code>]]=== | |||
===[[Ruby/IO/ | يقرأ من المجرى الذي استدعي معه عددًا محدَّدًا من البايتات باستخدام استدعاء النظام <code>pread</code>، ثم يُعيدها ك[[Ruby/String|سلسلة نصية]] من غير تعديل إزاحة (offset) الواصف الأساسي. | ||
===[[Ruby/IO/print|<code>print</code>]]=== | |||
يكتب الكائن (أو الكائنات) المُمرَّرة إليه في [[Ruby/IO|المجرى]] الذي استدعي معه ثم يُعيد القيمة <code>nil</code>. | |||
===[[Ruby/IO/printf|<code>printf</code>]]=== | |||
===[[Ruby/IO/ | ينسق الكائنات المُمرَّرة إليه ثم يكتبها في المجرى الذي استدعي معه. | ||
===[[Ruby/IO/putc|<code>putc</code>]]=== | |||
===[[Ruby/IO/ | يكتب المحرف المُمرَّر إليه في المجرى الذي استدعي معه. | ||
===[[Ruby/IO/puts|<code>puts</code>]]=== | |||
===[[Ruby/IO/ | يكتب الكائن(ات) المُمرَّرة إليه في المجرى الذي استُدعي معه، ويضيف سطرًا جديدًا بعد الأسطر التي لا تنتهي بمحرف السطر الجديد ثم يعيد القيمة <code>nil</code>. | ||
===[[Ruby/IO/pwrite|<code>pwrite</code>]]=== | |||
يكتب [[Ruby/String|السلسلة النصية]] المُمرَّرة إليه في موضع محدَّد من المجرى الذي استُدعي معه باستخدام استدعاء دالة النظام <code>pwrite()</code>. | |||
===[[Ruby/IO/read-i|<code>read</code>]]=== | |||
===[[Ruby/IO/ | يقرأ عددًا محدَّدًا من البايتات من المجرى الذي استدعي معه. | ||
===[[Ruby/IO/read nonblock|<code>read_nonblock</code>]]=== | |||
===[[Ruby/IO/ | يقرأ عددًا محدَّدًا من البايتات من المجرى الذي استُدعي معه باستخدام استدعاء النظام <code>read(2)</code> بعد تعيين الراية <code>O_NONBLOCK</code> لواصف الملف (file descriptor) الأساسي. | ||
===[[Ruby/IO/readbyte|<code>readbyte</code>]]=== | |||
===[[Ruby/IO/ | يقرأ بايتًا واحدًا من المجرى الذي استدعي معه. | ||
===[[Ruby/IO/readchar|<code>readchar</code>]]=== | |||
===[[Ruby/IO/ | يقرأ محرفًا واحدًا من المجرى الذي استدعي معه. | ||
===[[Ruby/IO/readline|<code>readline</code>]]=== | |||
===[[Ruby/ | يقرأ سطرًا واحدًا من المجرى الذي استدعي معه. | ||
===[[Ruby/IO/readlines-i|<code>readlines</code>]]=== | |||
يقرأ كل الأسطر الموجودة في المجرى الذي استدعي معه ثم يعيدها في [[Ruby/Array|مصفوفة]]. | |||
===[[Ruby/IO/readpartial|<code>readpartial</code>]]=== | |||
يقرأ عددًا محدَّدًا من البايتات من المجرى الذي استدعي معه. | |||
===[[Ruby/IO/reopen|<code>reopen</code>]]=== | |||
يعيد ربط المجرى الذي استُدعي معه مع مجرى آخر جديد أو موجود مسبقًا. | |||
===[[Ruby/IO/rewind|<code>rewind</code>]]=== | |||
يعيد مؤشر المجرى الذي استُدعي معه إلى موضع بداية الإدخال. | |||
===[[Ruby/IO/seek|<code>seek</code>]]=== | |||
يحرِّك مؤشر المجرى الذي استدعي معه إلى موضع محدَّد. | |||
===[[Ruby/IO/set encoding|<code>set_encoding</code>]]=== | |||
يضبط الترميز الداخلي والخارجي في المجرى الذي استدعي معه. | |||
===[[Ruby/IO/stat|<code>stat</code>]]=== | |||
يُعيد معلومات حالة المجرى الذي استُدعي معه على هيئة كائن من النوع<code>[[Ruby/File::Stat|File::Stat]]</code>. | |||
===[[Ruby/IO/sync|<code>sync</code>]]=== | |||
يُعيد قيمة راية وضع المزامنة (sync mode) للمجرى الذي استدعي معه. | |||
===[[Ruby/IO/sync-3D|<code>sync=</code>]]=== | |||
يضبط عند استدعائه بالشكل <code>sync = boolean</code> قيمة راية "وضع المزامنة" (sync mode) إلى القيمة <code>boolean</code> المنطقية. | |||
===[[Ruby/IO/sysread|<code>sysread</code>]]=== | |||
يقرأ عددًا محدَّدًا من البايتات من المجرى الذي استدعي معه باستخدام قراءة منخفضة المستوى (low-level read)، ثم يُعيدها ك[[Ruby/String|سلسلة نصية]]. | |||
===[[Ruby/IO/sysseek|<code>sysseek</code>]]=== | |||
يحرِّك مؤشر <nowiki/>[[Ruby/IO|المجرى]] الذي استدعي معه إلى موضع محدَّد. | |||
===[[Ruby/IO/syswrite|<code>syswrite</code>]]=== | |||
يكتب [[Ruby/String|السلسلة النصية]] المُمرَّرة إليه في المجرى الذي استُدعي معه باستخدام كتابة منخفض المستوى (low-level write). | |||
===[[Ruby/IO/tell|<code>tell</code>]]=== | |||
يُعيد موضع المؤشر الحالي (بالبايت) للمجرى الذي استدعي معه. | |||
===[[Ruby/IO/to i|<code>to_i</code>]]=== | |||
يعد اسمًا بديلًا للتابع <code>[[Ruby/IO/fileno|fileno]]</code>. | |||
===[[Ruby/IO/ | ===[[Ruby/IO/to io|<code>to_io</code>]]=== | ||
يعيد المجرى نفسه الذي استُدعي معه. | |||
===[[Ruby/IO/tty-3F | | ===[[Ruby/IO/tty-3F|<code>tty?</code>]]=== | ||
يتحقق إن كان المجرى الذي استدعي معه مرتبطًا بجهاز طرفي (tty). | |||
===[[Ruby/IO/ungetbyte | ungetbyte]]=== | ===[[Ruby/IO/ungetbyte|<code>ungetbyte</code>]]=== | ||
يعيد دفع (pushes) البايتات (الممررة كمعامل إليه) إلى المجرى الذي استُدعي معه، بحيث تعيدها القراءة التالية من المخزن المؤقت (buffer) لهذا المجرى. | |||
===[[Ruby/IO/ungetc | | ===[[Ruby/IO/ungetc|<code>ungetc</code>]]=== | ||
يعيد دفع محرف واحد (الذي مُرِّر إليه) إلى المجرى الذي استُدعي معه، بحيث تعيده القراءة التالية من المخزن المؤقت (buffer). | |||
===[[Ruby/IO/write-i | write]]=== | ===[[Ruby/IO/write-i|<code>write</code>]]=== | ||
يكتب | يكتب [[Ruby/String|السلاسل النصية]] المُمرَّرة إليه في المجرى الذي استدعي معه. | ||
===[[Ruby/IO/write nonblock|<code>write_nonblock</code>]]=== | |||
يكتب | يكتب [[Ruby/String|السلسلة النصية]] المُمرَّرة إليه في المجرى الذي استُدعي معه باستخدام استدعاء النظام <code>write(2)</code> بعد تعيين قيمة الراية <code>O_NONBLOCK</code> الخاصة بواصف الملف (file descriptor) الأساسي. | ||
==مصادر== | ==مصادر== | ||
*[http://ruby-doc.org/core-2.5.1/IO.html | *[http://ruby-doc.org/core-2.5.1/IO.html صفحة الصنف IO في توثيق روبي الرسمي.] |
المراجعة الحالية بتاريخ 12:34، 23 ديسمبر 2018
الصنف IO
هو أساس كل عمليات الإدخال والإخراج في روبي. مجرى الدخل/الخرج (I/O stream) قد يكون مزدوج الاتجاه (duplexed، أي في اتجاهين)، وبذلك قد يُستخدَم أكثر من مجرى واحد من مجاري نظام التشغيل.
الكثير من الأمثلة الواردة في في هذا القسم تستخدم الصنف File
، وهو االصنف الفرعي (subclass) القياسي الوحيد للصنف IO
، إذ يرتبط الصنفان ارتباطًا وثيقًا.
مثل الصنف File
، فإنّ المكتبة Socket تشتق أصنافًا فرعيةً من الصنف IO
(مثل TCPSocket
أو UDPSocket
).
يمكن أن ينشئ التابع Kernel.open
كائنات من الصنف IO
(أو File
) من أنواع الوسائط التالية:
- سلسلة نصية لتمثيل اسم ملف مناسب لنظام التشغيل المستخدم.
- سلسلة نصية تبدأ بالمحرف
"|"
كناية عن عملية فرعية (subprocess). يتم استدعاء الجزء الذي يلي المحرف"|"
من السلسلة النصية كعملية (process)؛ هذه العملية ستكون متصلة بقنوات الدخل/الخرج (د/خ) المناسبة. - إن كانت السلسلة النصية تساوي
"|-"
، فسيتم إنشاء نسخة (instance) أخرى من روبي كعملية فرعية.
يمكن فتح مجرى د/خ (IO
) مع مختلف أوضاع الملفات (مثل وضع القراءة فقط [read-only] أو الكتابة فقط [write-only]) ووفق الترميزات المناسبة لأجل إجراء عمليات التحويل. انظر صفحة التابع new
للتعرف على هذه الخيارات، وانظر صفحة Kernel.open
لمزيد من التفاصيل حول مختلف تنسيقات الأوامر المذكورة أعلاه.
يمكن أيضًا استخدام التابع popen
أو المكتبة Open3
أو التابع Process.spawn
للتواصل مع العمليات الفرعية عبر مجرى د/خ.
ستُحول روبي أسماء المسارات بما يتوافق مع نظام التشغيل المستخدم إن أمكن. على سبيل المثال، في نظام ويندوز، سيُفتح اسم الملف "/gumby/ruby/test.rb"
باعتباره "\gumby\ruby\test.rb"
.
عند تحديد اسم ملف بنمط ويندوز في سلسلة نصية، تذكر أن تهرِّب (escape) الخطوط المائلة العكسية مثل:
"C:\\gumby\\ruby\\test.rb"
سوف نستخدم في الأمثلة الموجودة في صفحات التوابع الخطوط المائلة للأمام على نمط اليونيكس؛ يمكن الحصول على المحرف الفاصل للمجلدات في المسارات الخاص بنظام التشغيل عبر الثابت File::ALT_SEPARATOR
.
يوفر الثابت العام ARGF
(يمكن الوصول إليه عبر $<
) مجرًى مشابهًا لمجرى د/خ (I/O)، والذي يسمح بالوصول إلى كافة الملفات المذكورة في سطر الأوامر (أو في المجرى STDIN
في حال لم يذكر أي ملف). يمكن استخدام التابع ARGF.path
وبديله ARGF.filename
للوصول إلى اسم الملف الذي تتم قراءته حاليًا.
الملحقة io/console
توفر الملحقة io/console توابع للتفاعل مع وحدة التحكم (console). يمكن الوصول إلى وحدة التحكم (أو الطرفية) عبر التابع IO.console
، أو من مجاري الدخل والخرج القياسية التي هي input
و output
و error
.
استيراد io/console يؤدي إلى إضافة التوابع التالية:
IO::console
IO#raw
IO#raw!
IO#cooked
IO#cooked!
IO#getch
IO#echo=
IO#echo?
IO#noecho
IO#winsize
IO#winsize=
IO#iflush
IO#ioflush
IO#oflush
إليك المثال التالي حول استدعاء الملحقة io/console وإضافتها لاستعمال التابع winsize
:
require 'io/console'
rows, columns = $stdout.winsize
puts "Your screen is #{columns} wide and #{rows} tall"
الثوابت
EWOULDBLOCKWaitReadable
اطلع على صفحة الصنف IO::EAGAINWaitReadable
.
EWOULDBLOCKWaitWritable
اطلع على صفحة الصنف IO::EAGAINWaitWritable
.
SEEK_CUR
يضبط موضع مؤشِّر عملية الدخل والخرج بدءًا من الموضع الحالي له.
SEEK_DATA
يضبط موضع مؤشِّر عملية الدخل والخرج إلى الموقع التالي الذي يحتوي على البيانات.
SEEK_END
يضبط موضع مؤشِّر عملية الدخل والخرج بدءًا من النهاية.
SEEK_HOLE
يضبط موضع مؤشِّر عملية الدخل والخرج إلى الفجوة التالية.
SEEK_SET
يضبط موضع مؤشِّر عملية الدخل والخرج بدءًا من البداية.
توابع الصنف العامة
binread
يفتح الملف ثم يحرِّك موضع المؤشر بمقدار محدد (في حال إعطائه) ثم يجلب جميع محتوى الملف بدءًا من موضع المؤشر وحتى نهاية الملف أو يجلب حجم محدَّد من البيانات.
binwrite
يشبه التابع write
باستثناء أنه يفتح الملف في الوضع الثنائي (binary mode) وبالترميز ASCII-8BIT.
copy_stream
ينسخ بيانات من مجرى إلى مجرى آخر.
for_fd
يعد مرادفًا للتابع new
.
foreach
ينفذ الكتلة المعطاة على كل سطر في منفذ مجرى د/خ المسمى.
new
ينشئ كائنًا جديدًا من النوع IO
.
open
يشبه التابعَ new
تمامًا عند استدعائه دون كتلة، أو يُمرّر الكائن IO
الذي جرى إنشاؤه كوسيط إلى الكتلة المعطاة ثم يعيد الناتج الذي تعيده الكتلة.
pipe
ينشئ زوجًا من طرفي أنبوب (pipe endpoints) متصلين ببعضهما بعضًا ثم يعيدهما على هيئة مصفوفة من الكائنات IO
.
popen
ينفذ الأمر المعطى كعملية فرعية (subprocess) مع توصيل المجرَيَين القياسيين للدخل والخرج للعملية الفرعية مع المجرى IO
المُعاد.
read
يقرأ ملفًا محددًا بعد فتحه ثم يغلقه قبل إعادة الناتج.
readlines
يقرأ ملفًا بأكمله سطرًا سطرًا ثم يعيد تلك الأسطر في مصفوفة.
select
يستدعي استدعاء النظام select(2)
. ويراقب المصفوفة المعطاة المكونة من مجاري د/خ (كائنات IO
)، وينتظر حتى يكون واحد أو أكثر من تلك المجاري جاهزًا للقراءة، وجاهزًا للكتابة، ويكون له استثناءات معلقة (pending exceptions) على التوالي، ثم يعيد مصفوفة مؤلفة من مصفوفات مكونة من تلك المجاري.
sysopen
يفتح الملف الموجود في المسار المحدد، ثم يعيد واصف الملف الأساسي كعدد صحيح.
try_convert
يحاول تحويل الكائن المُمرَّر إليه إلى مجرى د/خ باستخدام التابع to_io
.
write
يفتح ملفًا محدَّدًا ويكتب فيه السلسلة النصية المُمرَّرة إليه ثم يغلقه ويعيد عدد البايتات التي كتبها.
توابع النسخة العامة (Public Instance Methods)
<<
يكتب كائنًا في المجرى IO
المعطى.
advise
يعلن عن نية الوصول إلى بيانات الملف الحالي وفق نمط محدد.
autoclose
يُعيّن عند استدعائه بالشكل autoclose = bool
قيمة راية الإغلاق التلقائي (auto-close flag) إلى القيمة bool
المنطقية.
autoclose?
يتحقق إن كان واصف الملف الأساسي لمجرى معين سيُغلق تلقائيًا عند الانتهاء منه.
binmode
يجعل مجرى د/خ في الوضع الثنائي (binary mode).
binmode?
يتحقق إن كان مجرى د/خ في الوضع الثنائي (binary mode).
bytes
يعد اسمًا بديلًا مهملًا للتابع each_byte
.
chars
يعد اسمًا بديلًا مهملًا للتابع each_char
.
close
يغلق المجرى الذي استدعي معه ويرسل (flushes) أي كتابات مُعلّقة إلى نظام التشغيل.
close_on_exec
يعين عند استدعائه بالشكل close_on_exec = bool
قيمة الراية close-on-exec
إلى القيمة bool
.
close_on_exec?
يتحقق إن كانت الراية close-on-exec
الخاصة بالمجرى الذي استدعي معه مضبوطة إلى القيمة true
.
close_read
يغلق طرف القراءة الخاص بمجرى د/خ مزدوج (duplex).
close_write
يغلق طرف الكتابة الخاص بمجرى د/خ مزدوج (duplex).
closed?
يتحقق إن كان مجرى د/خ مغلقًا تمامًا.
codepoints
يعدُّ اسمًا بديلًا مهملًا للتابع each_codepoint
.
each
ينفذ الكتلة المعطاة على كل سطر في المجرى الذي استُدعي معه.
each_byte
يستدعي الكتلة المعطاة على كل بايت (0..255) في المجرى الذي استدعي معه.
each_char
يستدعي الكتلة المعطاة على كل محرف في المجرى الذي استدعي معه.
each_codepoint
يمرر كل عدد من الأعداد الترتيبية (Integer ordinal) لكل محرف من المحارف الموجودة في المجرى الذي استدعي معه إلى الكتلة المعطاة.
each_line
ينفذ الكتلة المعطاة على كل سطر في المجرى الذي استدعي معه.
eof
يتحقق إن وصل المجرى الذي استدعي معه إلى نهاية الملف.
eof?
يتحقق إن وصل المجرى الذي استدعي معه إلى نهاية الملف.
external_encoding
يُعيد الكائن Encoding
الذي يمثل ترميز الملف للمجرى الذي استدعي معه.
fcntl
يوفر آلية لإصدار أوامر منخفضة المستوى للتحكم في أو الاستعلام عن مجاري د/خ الموجهة بالملفات (file-oriented I/O).
fdatasync
يكتب مباشرةً جميع البيانات المخزنة في مجرى د/خ على القرص.
fileno
يُعيد عددًا صحيحًا يمثل واصف الملف الرقمي للمجرى الذي استدعي معه.
flush
ينقل أي بيانات مخزَّنة في المجرى الذي استدعي معه إلى نظام التشغيل.
fsync
يكتب مباشرةً جميع البيانات المخزنة في المجرى الذي استدعي معه على القرص.
getbyte
يجلب البايت التالي من المجرى الذي استدعي معه.
getc
يجلب محرفًا واحدًا من المجرى الذي استدعي معه.
gets
يجلب السطر التالي من المجرى الذي استدعي معه.
inspect
يُعيد سلسلة نصية تصف المجرى الذي استُدعي معه.
internal_encoding
يعيد الترميز الخاص بالسلسلة النصية الداخلية في حال تحديد التحويل.
ioctl
يوفر آلية لإصدار أوامر منخفضة المستوى للتحكم في أو الاستعلام عن أجهزة مجاري د/خ.
isatty
يتحقق إن كان المجرى الذي استدعي معه مربوطًا بجهاز طرفي (tty).
lineno
يعيد رقم السطر الحالي في المجرى الذي استدعي معه. يجب أن يكون المجرى مفتوحًا في وضعية القراءة.
lineno=
يعيّن عند استدعاءه بالشكل lineno = integer
رقم السطر الحالي يدويًا إلى القيمة integer
.
lines
مرادف مُتجاوز للتابع each_line
.
pid
يعيد معرف العملية (PID) الخاص بالعملية الفرعية (child process) المرتبطة بالمجرى الذي استدعي معه.
pos
يُعيد موضع المؤشر الحالي بدءًا من بداية الملف (بالبايت) للمجرى الذي استدعي معه.
pos=
يحرِّك عند استدعائه بالشكل pos = integer
موضع المؤشر الحالي إلى الموضع integer (بالبايت) للمجرى الذي استدعي معه.
pread
يقرأ من المجرى الذي استدعي معه عددًا محدَّدًا من البايتات باستخدام استدعاء النظام pread
، ثم يُعيدها كسلسلة نصية من غير تعديل إزاحة (offset) الواصف الأساسي.
print
يكتب الكائن (أو الكائنات) المُمرَّرة إليه في المجرى الذي استدعي معه ثم يُعيد القيمة nil
.
printf
ينسق الكائنات المُمرَّرة إليه ثم يكتبها في المجرى الذي استدعي معه.
putc
يكتب المحرف المُمرَّر إليه في المجرى الذي استدعي معه.
puts
يكتب الكائن(ات) المُمرَّرة إليه في المجرى الذي استُدعي معه، ويضيف سطرًا جديدًا بعد الأسطر التي لا تنتهي بمحرف السطر الجديد ثم يعيد القيمة nil
.
pwrite
يكتب السلسلة النصية المُمرَّرة إليه في موضع محدَّد من المجرى الذي استُدعي معه باستخدام استدعاء دالة النظام pwrite()
.
read
يقرأ عددًا محدَّدًا من البايتات من المجرى الذي استدعي معه.
read_nonblock
يقرأ عددًا محدَّدًا من البايتات من المجرى الذي استُدعي معه باستخدام استدعاء النظام read(2)
بعد تعيين الراية O_NONBLOCK
لواصف الملف (file descriptor) الأساسي.
readbyte
يقرأ بايتًا واحدًا من المجرى الذي استدعي معه.
readchar
يقرأ محرفًا واحدًا من المجرى الذي استدعي معه.
readline
يقرأ سطرًا واحدًا من المجرى الذي استدعي معه.
readlines
يقرأ كل الأسطر الموجودة في المجرى الذي استدعي معه ثم يعيدها في مصفوفة.
readpartial
يقرأ عددًا محدَّدًا من البايتات من المجرى الذي استدعي معه.
reopen
يعيد ربط المجرى الذي استُدعي معه مع مجرى آخر جديد أو موجود مسبقًا.
rewind
يعيد مؤشر المجرى الذي استُدعي معه إلى موضع بداية الإدخال.
seek
يحرِّك مؤشر المجرى الذي استدعي معه إلى موضع محدَّد.
set_encoding
يضبط الترميز الداخلي والخارجي في المجرى الذي استدعي معه.
stat
يُعيد معلومات حالة المجرى الذي استُدعي معه على هيئة كائن من النوعFile::Stat
.
sync
يُعيد قيمة راية وضع المزامنة (sync mode) للمجرى الذي استدعي معه.
sync=
يضبط عند استدعائه بالشكل sync = boolean
قيمة راية "وضع المزامنة" (sync mode) إلى القيمة boolean
المنطقية.
sysread
يقرأ عددًا محدَّدًا من البايتات من المجرى الذي استدعي معه باستخدام قراءة منخفضة المستوى (low-level read)، ثم يُعيدها كسلسلة نصية.
sysseek
يحرِّك مؤشر المجرى الذي استدعي معه إلى موضع محدَّد.
syswrite
يكتب السلسلة النصية المُمرَّرة إليه في المجرى الذي استُدعي معه باستخدام كتابة منخفض المستوى (low-level write).
tell
يُعيد موضع المؤشر الحالي (بالبايت) للمجرى الذي استدعي معه.
to_i
يعد اسمًا بديلًا للتابع fileno
.
to_io
يعيد المجرى نفسه الذي استُدعي معه.
tty?
يتحقق إن كان المجرى الذي استدعي معه مرتبطًا بجهاز طرفي (tty).
ungetbyte
يعيد دفع (pushes) البايتات (الممررة كمعامل إليه) إلى المجرى الذي استُدعي معه، بحيث تعيدها القراءة التالية من المخزن المؤقت (buffer) لهذا المجرى.
ungetc
يعيد دفع محرف واحد (الذي مُرِّر إليه) إلى المجرى الذي استُدعي معه، بحيث تعيده القراءة التالية من المخزن المؤقت (buffer).
write
يكتب السلاسل النصية المُمرَّرة إليه في المجرى الذي استدعي معه.
write_nonblock
يكتب السلسلة النصية المُمرَّرة إليه في المجرى الذي استُدعي معه باستخدام استدعاء النظام write(2)
بعد تعيين قيمة الراية O_NONBLOCK
الخاصة بواصف الملف (file descriptor) الأساسي.