التابع IO.read_nonblock
في روبي
يقرأ التابع read_nonblock
عددًا محدَّدًا من البايتات من المجرى الذي استُدعي معه باستخدام استدعاء النظام read(2)
بعد تعيين الراية O_NONBLOCK
لواصف الملف (file descriptor) الأساسي.
يستدعي التابع read_nonblock
استدعاء النظام read(2)
. كما أنه يتسبب في كل الأخطاء التي يسببها استدعاء النظام read(2)
، مثل Errno::EWOULDBLOCK
و Errno::EINTR
وغيرهما . لذا، يجب على المُستدعي التعامل مع هذه الأخطاء.
إن كان الاستثناء هو أحد الاستثنائين Errno::EWOULDBLOCK
أو Errno::EAGAIN
، فسيتم توسيعه بواسطة التابع WaitReadable
، حتى يمكن استخدامه لمعالجة الاستثناءات لأجل إعادة استدعاء التابع read_nonblock
.
يطلق التابع read_nonblock
الخطأ EOFError
عندما يصل إلى محرف نهاية الملف (EOF
).
إن كان المخزن المؤقت لقراءة البايت (read byte buffer) غير فارغ، فسيقرأ التابع read_nonblock
من المخزن المؤقت كما يفعل التابع readpartial
. في هذه الحالة، لا يتم استدعاء دالة النظام read(2)
.
عندما يطلق التابع read_nonblock
استثناءً من النوع IO::WaitReadable
، فلا ينبغي استدعاء read_nonblock
حتى يكون المجرى قابلًا للقراءة لتجنب الحلقات التكرارية. يمكن القيام بذلك على النحو التالي:
# (readpartial) محاكاة القراءة بالوضع المعطل
begin
result = io.read_nonblock(maxlen)
rescue IO::WaitReadable
IO.select([io])
retry
end
رغم أنَّ التابع read_nonblock
لا يُطلق الاستثتاء IO::WaitWritable
، فيمكن للتابع OpenSSL::Buffering.read_nonblock
إطلاقه. إن كان من الضروري استخدام مجرى د/خ و بروتوكول SSL بطريقة متعددة الأشكال (polymorphically)، فمن الضروري إذًا أن يعالَج IO::WaitWritable
. راجع توثيق OpenSSL::Buffering.read_nonblock
للاطلاع على مثلة بهذا الخصوص.
لاحظ أنَّ هذا التابع مماثل للتابع readpartial
، باستثناء أنَّ الراية non-blocking
ستكون مٌعيّنة.
عبر إعطاء الوسيط المسمى (keyword argumen) exception
القيمة false
، يمكنك منع التابع read_nonblock
من إطلاق الاستثناء IO::WaitReadable
، وجعله يُعيد الرمز :wait_readable
بدلًا من ذلك.
البنية العامة
read_nonblock(maxlen [, options]) → string
read_nonblock(maxlen, outbuf [, options])→ outbuf
المعاملات
maxlen
عدد صحيح يمثِّل الحد الأقصى للبايتات المراد قراءتها من المجرى المعطى.
outbuf
في حال إعطاء هذا المعامل الاختياري، فينبغي أن يشير إلى السلسلة النصية التي ستتلقى البيانات المقروءة من المجرى. لن يحتوي outbuf
إلا على البيانات المستلمة بعد استدعاء التابع حتى لو لم يكن فارغًا في البداية (أي ستُمسَح البيانات القديمة المخزنة فيه مسبقًا).
options
خيارات تضبط عملية القراءة.
القيمة المعادة
تعاد السلسلة النصية المقروءة من المجرى المعطى والتي لا يتجاوز حجمها الحجم maxlen
. عند محرف نهاية الملف (EOF
،) ستُعَاد القيمة nil
بدلًا من إطلاق الاستثناء EOFError
.
انظر أيضًا
- التابع
read
: يقرأ عددًا محدَّدًا من البايتات من المجرى الذي استدعي معه. - التابع
readbyte
: يقرأ بايتًا واحدًا من المجرى الذي استدعي معه. - التابع
readchar
: يقرأ محرفًا واحدًا من المجرى الذي استدعي معه. - التابع
readline
: يقرأ سطرًا واحدًا من المجرى الذي استدعي معه. - التابع
readlines
: يقرأ كل الأسطر الموجودة في المجرى الذي استدعي معه ثم يعيدها في مصفوفة. - التابع
readpartial
: يقرأ عددًا محدَّدًا من البايتات من المجرى الذي استدعي معه.