lio_listio(3)

الاسم
lio_listio - بدء قائمة طلبات الإدخال/الإخراج

المكتبة
مكتبة الوقت الحقيقي (librt، -lrt)

موجز
#include <aio.h>

int lio_listio(int n;
               int mode,
               struct aiocb *restrict const aiocb_list[restrict n],
               int n, struct sigevent *restrict sevp);

الوصف
الدالة lio_listio() تبدأ قائمة عمليات الإدخال/الإخراج الموصوفة بالمصفوفة aiocb_list.

عملية mode لها إحدى القيم التالية:

LIO_WAIT
    يحجب الاستدعاء حتى تكتمل جميع العمليات. يُتجاهل المعامل sevp.

LIO_NOWAIT
    تُصطف عمليات الإدخال/الإخراج للمعالجة ويعود الاستدعاء فورًا. عند اكتمال جميع عمليات الإدخال/الإخراج، يحدث إشعار غير متزامن، كما هو محدد بالمعامل sevp؛ انظر sigevent(3type) للتفاصيل. إذا كان sevp NULL، لا يحدث أي إشعار غير متزامن.

المعامل aiocb_list هو مصفوفة من المؤشرات إلى بنى aiocb التي تصف عمليات الإدخال/الإخراج. تُنفذ هذه العمليات بترتيب غير محدد. يحدد المعامل n حجم المصفوفة aiocb_list. تُتجاهل المؤشرات الفارغة في aiocb_list.

في كل كتلة تحكم في aiocb_list، يحدد الحقل aio_lio_opcode عملية الإدخال/الإخراج التي ستبدأ، كما يلي:

LIO_READ
    ابدأ عملية قراءة. تُصطف العملية كما في استدعاء aio_read(3) الذي يحدد كتلة التحكم هذه.

LIO_WRITE
    ابدأ عملية كتابة. تُصطف العملية كما في استدعاء aio_write(3) الذي يحدد كتلة التحكم هذه.

LIO_NOP
    تجاهل كتلة التحكم هذه.

للحقول المتبقية في كل كتلة تحكم نفس المعاني كما في aio_read(3) و aio_write(3). يمكن استخدام حقول aio_sigevent لكل كتلة تحكم لتحديد إشعارات لعمليات الإدخال/الإخراج الفردية (انظر sigevent(7)).

قيمة الإرجاع
إذا كان mode هو LIO_NOWAIT، تُرجع lio_listio() 0 إذا صُفت جميع عمليات الإدخال/الإخراج بنجاح. وإلا، تُرجع -1، ويُضبط errno للإشارة إلى الخطأ.

إذا كان mode هو LIO_WAIT، تُرجع lio_listio() 0 عندما تكتمل جميع عمليات الإدخال/الإخراج بنجاح. وإلا، تُرجع -1، ويُضبط errno للإشارة إلى الخطأ.

توفر حالة العودة من lio_listio() معلومات فقط عن الاستدعاء نفسه، وليس عن عمليات الإدخال/الإخراج الفردية. قد تفشل عملية أو أكثر من عمليات الإدخال/الإخراج، لكن هذا لا يمنع اكتمال العمليات الأخرى. يمكن تحديد حالة عمليات الإدخال/الإخراج الفردية في aiocb_list باستخدام aio_error(3). عند اكتمال عملية، يمكن الحصول على حالة عودتها باستخدام aio_return(3). يمكن أن تفشل عمليات الإدخال/الإخراج الفردية للأسباب الموصوفة في aio_read(3) و aio_write(3).

الأخطاء
قد تفشل الدالة lio_listio() للأسباب التالية:

EAGAIN
    نفاد الموارد.

EAGAIN
    عدد عمليات الإدخال/الإخراج المحددة بواسطة n قد يتسبب في تجاوز الحد AIO_MAX.

EINTR
    كان mode هو LIO_WAIT وتم التقاط إشارة قبل اكتمال جميع عمليات الإدخال/الإخراج؛ انظر signal(7). (قد تكون هذه إحدى الإشارات المستخدمة لإعلام اكتمال الإدخال/الإخراج غير المتزامن.)

EINVAL
    mode غير صالح، أو n يتجاوز الحد AIO_LISTIO_MAX.

EIO فشلت واحدة أو أكثر من العمليات المحددة بواسطة aiocb_list. يمكن للتطبيق التحقق من حالة كل عملية باستخدام aio_return(3).

إذا فشلت lio_listio() مع الخطأ EAGAIN أو EINTR أو EIO، فقد تكون بعض العمليات في aiocb_list قد بدأت. إذا فشلت lio_listio() لأي سبب آخر، فلن تكون أي من عمليات الإدخال/الإخراج قد بدأت.

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
lio_listio() | سلامة الخيوط | MT-Safe

المعايير
POSIX.1-2008.

التاريخ
glibc 2.1. POSIX.1-2001.

ملاحظات
من الجيد تصفير كتل التحكم قبل الاستخدام. يجب عدم تغيير كتل التحكم أثناء تنفيذ عمليات الإدخال/الإخراج. يجب عدم الوصول إلى مناطق المخزن المؤقت التي يتم القراءة منها أو الكتابة إليها أثناء العمليات وإلا قد تحدث نتائج غير محددة. يجب أن تظل مناطق الذاكرة المعنية صالحة.

تؤدي عمليات الإدخال/الإخراج المتزامنة التي تحدد نفس بنية aiocb إلى نتائج غير محددة.

انظر أيضًا
aio_cancel(3), aio_error(3), aio_fsync(3), aio_return(3), aio_suspend(3), aio_write(3), aio(7)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.