التابع 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. يُعيد عدد البايتات المكتوبة في الإجمال.