التابع IO.read_nonblock
في روبي
يقرأ التابع read_nonblock
على الأكثر maxlen
(انظر فقرة البنية العامة) بايتًا من مجرى د/خ الذي استُدعي معه باستخدام استدعاء النظام read(2)
بعد تعيين الراية O_NONBLOCK
لواصف الملف (file descriptor) الأساسي.
في حال إعطاء الوسيط الاختياري outbuf
، فينبغي أن يشير إلى سلسلة نصية، والتي ستتلقى البيانات. لن يحتوي الوسيط outbuf
إلا البيانات المستلمة بعد استدعاء التابع، حتى لو لم يكن فارغاً في البداية.
يستدعي التابع 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
حتى يكون مجرى د/خ قابلاً للقراءة، لتجنب الحلقات التكرارية. يمكن القيام بذلك على النحو التالي.
# emulates blocking read (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
بدلاً من ذلك.
عند محرف نهاية الملف (EOF
،) سيعيد التابع read_nonblock
القيمة nil
بدلاً من إطلاق EOFError
.
البنية العامة
read_nonblock(maxlen [, options]) → string
read_nonblock(maxlen, outbuf [, options])→ outbuf
المعاملات
maxlen
الحد الأقصى
options
خيارات
outbuf
سلسلة نصية تتلقى البيانات
القيمة المُعادة
يعيد التابع read_nonblock
سلسلة نصية.
انظر أيضا
- التابع
read
: يقرأ عددا من البايتات من مجرى د/خ. - التابع
readbyte
: يقرأ البايت كما يفعل التابعIO#getbyte
، إلا أنه يُطلق الاستثناءEOFError
عند نهاية الملف.