الصنف 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 بايت من مجرى د/خ

print

يكتب الكائن(ات) المعطاة في مجرى د/خ. ثم يُعيد 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

يكتب السلسلة النصية المعطاة في مجرى د/خ.

مصادر