التابع IO.write_nonblock
في روبي
يكتب التابع write_nonblock
السلسلة النصية المعطاة في ios
باستخدام استدعاء النظام write(2) بعد تعيين O_NONBLOCK لواصف الملف (file descriptor) الأساسي.
التابع write_nonblock
سيعيد عدد البايتات المكتوبة.
يستدعي التابع #write_nonblock
استدعاء النظام write(2). ويتسبب في كافة الأخطاء التي يتسبب فيها استدعاء النظام write(2) : Errno :: EWOULDBLOCK، Errno :: EINTR، إلخ. قد تكون النتيجة أيضاً أصغر من طول السلسلة النصية (string.length) (أي أن الكتابة جزئية). يجب أن يعالج المستدعي هذه الأخطاء، وكذلك مسألة الكتابة الجزئية.
إن كان الاستثناء هو Errno :: EWOULDBLOCK أو Errno :: EAGAIN، فسيتم توسيعه بواسطة IO::WaitWritable
. حتى يمكن استخدام IO::WaitWritable
لمعالجة الاستثناءات لأجل إعادة استدعاء التابع write_nonblock
.
إذا لم يكن المخزن المؤقت (buffer) للكتابة فارغًا، فسيتم إرساله (flushed) في البداية.
عندما يطلق التابع #write_nonblock
استثناءً من النوع IO::WaitWritable
، لا يجب استدعاء #write_nonblock
حتى يكون مجرى د/خ قابلاً للكتابة لتجنب الحلقات التكرارية. ويمكن القيام بذلك على النحو التالي.
لاحظ أن هذا لا يضمن كتابة جميع البيانات في السلسلة النصية. سيتم الإبلاغ عن الطول المكتوب في النتيجة، ويجب فحصه في وقت لاحقًا.
في بعض أنظمة التشغيل مثل ويندوز، قد لا يكون التابع #write_nonblock
مدعوما مع بعض أنواع مجاري د/خ IO
. في مثل هذه الحالات، سيُطلق #write_nonblock
الاستثناء Errno::EBADF
.
عبر إعطاء الوسيط المسمى (keyword argument) exception
(انظر فقرة البنية العامة) القيمة false
، يمكنك جعل التابع #write_nonblock
لا يطلق استثناء IO::WaitWritable
، بل يُعيد الرمز :wait_writable
بدلاً من ذلك.
البنية العامة
write_nonblock(string)→ integer
write_nonblock(string [, options])→ integer
المعاملات
string
options
خيارات
القيمة المُعادة
أمثلة
مثال على استخدام التابع write_nonblock
:
# Creates a pipe.
r, w = IO.pipe
# write_nonblock writes only 65536 bytes and return 65536.
# (The pipe size is 65536 bytes on this environment.)
s = "a" * 100000
p w.write_nonblock(s) #=> 65536
# write_nonblock cannot write a byte and raise EWOULDBLOCK (EAGAIN).
p w.write_nonblock("b") # Resource temporarily unavailable (Errno::EAGAIN)
انظر أيضا
- التابع
write
: يكتب السلاسل النصية المعطاة في مجرى د/خios
. يجب أن يكون المجرى مفتوحا في وضعية للكتابة. سيتم تحويل الوسائط غير النصية إلى سلسلة نصية باستخدامto_s
. يُعيد عدد البايتات المكتوبة في الإجمال.