الصنف 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"
توابع الصنف العامة (Public Class Methods)
binread
يفتح الملف، ثم يتموضع اختياريا في الموضع المعطى
binwrite
مشابه للتابع write
،
copy_stream
ينسخ المصدر المعطى
for_fd
مرادف للتابع IO.new
.
foreach
ينفذ الكتلة المعطاة على كل سطر في منفذ مجرى د/خ
new
يُعيد كائنًا جديدًا من النوع IO
open
عند عدم تمرير كتلة، فسيكون التابع IO.open
مرادفاً للتابع ::new
.
pipe
ينشئ زوجًا من مداخل الأنابيب (pipe endpoints) (متصلة ببعضها البعض) ثم يعيدها على هيئة مصفوفة ثنائية من مجاري د/خ
popen
ينفذ التعليمة المعطاة على شكل عملية فرعية
read
يفتح الملف، ثم يتموضع اختياريا عند الموضع المعطى
readlines
يقرأ كامل الملف المحدد
select
يستدعي select(2)
. ويقوم بمراقبة المصفوفة المعطاة المكونة من مجاري د/خ (كائنات IO
)، وينتظر حتى يكون أحدها جاهزًا للقراءة، وجاهزا للكتابة، ويكون لها استثناءات معلقة (pending exceptions) على التوالي، ثم يعيد مصفوفة تحتوي على مصفوفات مكونة من مجاري د/خ
sysopen
يفتح المسار المحدد، ثم يعيد واصف الملف الأساسي كعدد صحيح.
try_convert
يحاول تحويل الوسيط المعطى إلى مجرى د/خ
write
يفتح الملف، ويتموضع اختياريا عند الإزاحة offset
المعطاة
توابع النسخة العامة (Public Instance Methods)
<<
مجرى الإخراج النصي
advise
يعلن عن نية الوصول إلى البيانات من الملف الحالي وفق نمط محدد.
autoclose=
يُعيّن قيمة راية الإغلاق التلقائي.
autoclose?
يُعيد القيمة true
إن كان واصف الملف الأساسي لمجرى د/خ سيُغله تلقائياً عند الانتهاء منه، وإلا سيُعيد false
.
binmode
يضع مجرى د/خ في الوضع الثنائي (binary mode).
binmode?
يُعيد القيمة true
إن كان مجرى د/خ في الوضع الثنائي (binary mode).
bytes
مرادف مُتجاوز للتابع each_byte
.
chars
مرادف مُتجاوز للتابع each_char
.
close
يغلق مجرى د/خ، وينقل (flushes) أي كتابات مُعلّقة إلى نظام التشغيل.
close_on_exec=
يعين الراية close-on-exec.
close_on_exec?
يُعيد القيمة true
إن كانت الراية close_on_exec الخاصة بمجرى د/خ تساوي true
.
close_read
يغلق طرف القراءة الخاص بمجرى مجرى د/خ
close_write
يغلق طرف الكتابة الخاص بمجرى د/خ
closed?
يعيد القيمة true
ان كان مجرى د/خ مغلقًا
codepoints
مرادف مُتجاوز للتابع each_codepoint
.
each
ينفذ الكتلة المعطاة على كل سطر في مجرى د/خ
each_byte
يستدعي الكتلة المعطاة على كل بايت (0..255) في مجرى د/خ
each_char
يستدعي الكتلة المعطاة على لكل حرف في مجرى د/خ
each_codepoint
ينفذ التابع الكتلة المعطاة، مع تمرير الرمز العددي (Integer ordinal) لكل حرف من الحروف الموجودة في مجرى د/خ، حيث يمرر رمز اليونيكود (codepoint) كوسيط.
each_line
ينفذ الكتلة المعطاة على كل سطر في مجرى د/خ
eof
يُعيد القيمة true
إن كان مجرى د/خ في نهاية الملف،
eof?
يُعيد القيمة true
إن كان مجرى د/خ في نهاية الملف،
external_encoding
يُعيد الترميز الخاص بالملف.
fcntl
يوفر آلية لإصدار أوامر منخفضة المستوى للتحكم في مجاري د/خ
fdatasync
يكتب على الفور جميع البيانات المخزنة في مجرى د/خ على القرص.
fileno
يُعيد عددا صحيحا يمثل واصف الملف الرقمي لمجرى د/خ
flush
ينقل (Flushes) أي بيانات مخزنة في مجرى د/خ إلى نظام التشغيل
fsync
يكتب على الفور جميع البيانات المخزنة في مجرى د/خ على القرص.
getbyte
يحصل على البايت (0..255) التالي من مجرى د/خ . ويُعيد nil
إن استُدعي عند نهاية الملف.
getc
يقرأ سلسلة نصية مُؤلفة من حرف واحد من مجرى د/خ. ويُعيد nil
إن استُدعي عند نهاية الملف.
gets
يقرأ "السطر" الموالي من مجرى د/خ.
inspect
يُعيد سلسلة نصية تصف مجرى د/خ الذي استُدعي معه.
internal_encoding
يعيد الترميز الخاص بالسلسلة النصية الداخلية في حالة تحديد التحويل.
ioctl
يوفر آلية لإصدار أوامر منخفضة المستوى للتحكم في أجهزة مجاري د/خ
isatty
يُعيد القيمة true
إن كان مجرى د/خ مربوطا بجهاز طرفي (tty)، أو يعيد false
خلاف ذلك.
lineno
يعيد رقم السطر الحالي في مجرى د/خ.
lineno=
يعيّن يدويًا رقم السطر الحالي ويعطيه القيمة المحددة.
lines
مرادف مُتجاوز للتابع each_line
.
pid
يُعيد معرف العملية (PID) الخاص بالعملية الفرعية (child process) المرتبطة بمجرى د/خ.
pos
يُعيد الإزاحة (offset) الحالية (بالبايت) في مجرى د/خ.
pos=
يسعى إلى التموضع عند الإزاحة المحددة (بالبايت) في مجرى د/خ
pread
يقرأ maxlen
بايت من مجرى د/خ
يكتب الكائن(ات) المعطاة في مجرى د/خ. ثم يُعيد nil
.
printf
ينسق ويكتب في مجرى د/خ،
putc
إن كان الوسيط المعطى obj
عددًا، فسيكتب التابع putc
الحرف الذي رمزه هو البايت الأقل دلالة (least-significant byte) فيobj
. أما إن كان obj
سلسلة نصية، فسيكتب أول حرف من obj
في مجرى د/خ. خلاف ذلك، سيُطلق الاستثناء TypeError
.
puts
يكتب الكائن(اات) المعطاة في مجرى د/خ.
pwrite
يكتب السلسلة النصية المعطاة في مجرى د/خ عند موضع الإزاحة المعطى.
read
يقرأ عددا من البايتات من مجرى د/خ.
read_nonblock
يقرأ على الأكثر maxlen
بايتًا من مجرى د/خ.
readbyte
يقرأ البايت كما يفعل التابع getbyte
، إلا أنه يُطلق الاستثناء EOFError
عند نهاية الملف.
readchar
يقرأ سلسلة نصية مؤلفة من حرف واحد من مجرى د/خ. ويطلق الاستثناء EOFError
عند نهاية الملف.
readline
يقرأ سطرًا كما يفعل التابع gets
، إلا أنه يُطلق الاستثناء EOFError
عند نهاية الملف.
readlines
يقرأ كل الأسطر الموجودة في مجرى د/خ، ثم يعيدها في مصفوفة.
readpartial
يقرأ maxlen
بايتًا على الأكثر من مجرى د/خ.
reopen
يربط بين مجرى د/خ الذي استُدعي معه وبين مجرى د/خ المعطى.
rewind
يُموضِع مجرى د/خ الذي استُدعي معه عند بداية الإدخال، مع تعيين lineno
عند القيمة صفر.
seek
يسعى إلى التموضع عند الإزاحة المعطاة anInteger
في مجرى د/خ
set_encoding
في حال تمرير وسيط واحد، فستوسم السلسلة النصية المقروءة من مجرى د/خ بالترميز المحدد.
stat
يُعيد معلومات الحالة لمجرى د/خ الذي استُدعي معه على هيئة كائن من النوع File::Stat
.
sync
يُعيد قيمة راية وضع المزامنة "sync mode" الحالية لمجرى د/خ.
sync=
يضبط قيمة راية وضع المزامنة “sync mode' عند إحدى القيمتين true
أو false
.
sysread
يقرأ عددا من البايتات من مجرى د/خ الذي استُدعي معه.
sysseek
يسعى إلى التموضع عند الإزاحة المعطاة.
syswrite
يكتب السلسلة النصية المعطاة في مجرى د/خ الذي استُدعي معه.
tell
يُعيد الإزاحة الحالية (بالبايت) في مجرى د/خ.
to_i
مرادف للتابع fileno
.
to_io
يعيد مجرى د/خ الذي استُدعي معه.
tty?
يُعيد القيمة true
إن كان مجرى د/خ مربوطا بطرفية (tty)، أو يعيد false
خلاف ذلك.
ungetbyte
يدفع (Pushes back) البايتات (التي تم تمريرها كوسيط) إلى مجرى د/خ الذي استُدعي معه.
ungetc
يدفع حرفا واحدا (المُمرر كوسيط) في مجرى د/خ الذي استُدعي معه.
write
يكتب السلاسل النصية المعطاة في مجرى د/خ.
write_nonblock
يكتب السلسلة النصية المعطاة في مجرى د/خ.