الصنف IO
في روبي
الصنف IO
هو أساس كل عمليات الإدخال والإخراج في روبي. مجرى د/خ (I/O stream) قد يكون مزدوج الاتجاه (duplexed)، ولذلك قد يستخدم أكثر من مجرى واحد من مجاري نظام التشغيل.
الكثير من الأمثلة الواردة في في هذا القسم تستخدم الصنف File
، وهو االصنف الفرعي (subclass) القياسي الوحيد للصنف IO
. الصنفان يرتبطان ارتباطًا وثيقًا.
مثل صنف الملفات، فإنّ المكتبة Socket تشتق أصنافًا فرعيةً من الصنف IO
(مثل TCPSocket
أو UDPSocket
).
يمكن أن ينشئ التابع Kernel#open
كائنات من الصنف IO
(أو File
) من أنواع الوسائط التالية:
- سلسلة نصية لتمثيل اسم ملف مناسب لنظام التشغيل المستخدم.
- سلسلة نصية تبدأ بالمحرف
"|"
كناية عن عملية فرعية (subprocess). يتم استدعاء الجزء الموالي للمحرف"|"
من السلسلة النصية كعملية (process)، هذه العملية ستكون متصلة بقنوات الإدخال/الإخراج (د/خ) المناسبة. - إن كانت السلسلة النصية تساوي
"|-"
، فسيتم إنشاء نسخة (instance) أخرى من روبي كعملية فرعية.
يمكن فتح مجرى د/خ (IO
) مع مختلف أوضاع الملفات (مثلًا، وضع القراءة فقط [read-only] أو الكتابة فقط [write-only]) ووفق الترميزات المناسبة لأجل إجراء عمليات التحويل. انظر صفحة التابع new
للتعرف على هذه الخيارات. وانظر صفحة Kernel#open
لمزيد من التفاصيل حول مختلف تنسيقات الأوامر المذكورة أعلاه.
يمكن أيضًا استخدام التابع popen
أو المكتبة Open3
أو Process#spawn
للتواصل مع العمليات الفرعية عبر مجرى د/خ (IO)
.
ستُحول روبي أسماء المسارات بما يتوافق مع نظام التشغيل المستخدم إن أمكن. على سبيل المثال، في نظام ويندوز، سيُفتح اسم الملف "/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
، أو من مجاري د/خ (I/O
) القياسية 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
مثال:
require 'io/console'
rows, columns = $stdout.winsize
puts "Your screen is #{columns} wide and #{rows} tall"