io_submit(2)

الاسم
io_submit - إرسال كتل الإدخال/الإخراج غير المتزامنة للمعالجة

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <linux/aio_abi.h>
#include <sys/syscall.h>     /* تعريف ثوابت SYS_* */
#include <unistd.h>

int syscall(SYS_io_submit, aio_context_t ctx_id,
            long n, struct iocb *iocbpp[n]);

الوصف
ملاحظة: ربما تريد استخدام دالة الغلاف io_setup(3) التي يوفرها libaio؛ انظر الإصدارات.

استدعاء النظام io_submit() يضع n كتلة طلب إدخال/إخراج في قائمة الانتظار للمعالجة في سياق AIO ctx_id. يجب أن تكون وسيطة iocbpp مصفوفة من n كتلة تحكم AIO، والتي ستُرسل إلى السياق ctx_id.

هيكل iocb (كتلة التحكم في الإدخال/الإخراج) المُعرّف في linux/aio_abi.h يُعرّف المعاملات التي تتحكم في عملية الإدخال/الإخراج.

    #include <linux/aio_abi.h>

    struct iocb {
        __u64   aio_data;
        __u32   PADDED(aio_key, aio_rw_flags);
        __u16   aio_lio_opcode;
        __s16   aio_reqprio;
        __u32   aio_fildes;
        __u64   aio_buf;
        __u64   aio_nbytes;
        __s64   aio_offset;
        __u64   aio_reserved2;
        __u32   aio_flags;
        __u32   aio_resfd;
    };

حقول هذا الهيكل هي كالتالي:

aio_data
    تُنسخ هذه البيانات إلى حقل data من هيكل io_event عند اكتمال الإدخال/الإخراج (انظر io_getevents(2)).

aio_key
    هذا حقل داخلي يستخدمه النواة. لا تُعدّل هذا الحقل بعد استدعاء io_submit().

aio_rw_flags
    يُعرّف هذا أعلام القراءة/الكتابة الممررة مع الهيكل. القيم الصالحة هي:

    RWF_APPEND (منذ لينكس 4.16)
        إلحاق البيانات بنهاية الملف. انظر وصف العلم الذي يحمل نفس الاسم في pwritev2(2) وكذلك وصف O_APPEND في open(2). يُتجاهل حقل aio_offset. لا يتغير إزاحة الملف.

    RWF_DSYNC (منذ لينكس 4.13)
        اكتمال عملية الكتابة وفقًا لمتطلبات سلامة بيانات الإدخال/الإخراج المتزامن. انظر وصف العلم الذي يحمل نفس الاسم في pwritev2(2) وكذلك وصف O_DSYNC في open(2).

    RWF_HIPRI (منذ لينكس 4.13)
        طلب ذو أولوية عالية، استطلاع إذا أمكن

    RWF_NOWAIT (منذ لينكس 4.14)
        لا تنتظر إذا كان الإدخال/الإخراج سيمنع لعمليات مثل تخصيص كتل الملفات، أو مسح الصفحات المتسخة، أو أقفال المزامنة، أو جهاز كتلة مزدحم داخل النواة. إذا تحقق أي من هذه الشروط، تُعاد كتلة التحكم فورًا بقيمة إرجاع -EAGAIN في حقل res من هيكل io_event (انظر io_getevents(2)).

    RWF_SYNC (منذ لينكس 4.13)
        اكتمال عملية الكتابة وفقًا لمتطلبات سلامة ملف الإدخال/الإخراج المتزامن. انظر وصف العلم الذي يحمل نفس الاسم في pwritev2(2) وكذلك وصف O_SYNC في open(2).

    RWF_NOAPPEND (منذ لينكس 6.9)
        لا تُكرّم علم O_APPEND من open(2). انظر وصف RWF_NOAPPEND في pwritev2(2).

    RWF_ATOMIC (منذ لينكس 6.11)
        اكتب كتلة من البيانات بحيث لا تُقطع الكتابة أبدًا بسبب انقطاع الطاقة أو ما شابه. انظر وصف RWF_ATOMIC في pwritev2(2). للاستخدام مع IOCB_CMD_PWRITEV، الحد الأعلى للمتجه هو stx_atomic_write_segments_max. انظر STATX_WRITE_ATOMIC ووصف stx_atomic_write_segments_max في statx(2).

aio_lio_opcode
    يُعرّف هذا نوع الإدخال/الإخراج الذي سينفذه هيكل iocb. القيم الصالحة مُعرّفة بواسطة التعداد المُعرّف في linux/aio_abi.h:

        enum {
            IOCB_CMD_PREAD = 0,
            IOCB_CMD_PWRITE = 1,
            IOCB_CMD_FSYNC = 2,
            IOCB_CMD_FDSYNC = 3,
            IOCB_CMD_POLL = 5,
            IOCB_CMD_NOOP = 6,
            IOCB_CMD_PREADV = 7,
            IOCB_CMD_PWRITEV = 8,
        };

aio_reqprio
    يُعرّف هذا أولوية الطلبات.

aio_fildes
    واصف الملف الذي سيجري عليه الإدخال/الإخراج.

aio_buf
    هذه هي الخبيئة المستخدمة لنقل البيانات لعملية قراءة أو كتابة.

aio_nbytes
    هذا هو حجم الوسيط الذي يشير إليه aio_buf.

aio_offset
    هذه هي إزاحة الملف التي ستُجرى عندها عملية الإدخال/الإخراج.

aio_flags
    هذه مجموعة الأعلام المرتبطة بهيكل iocb. القيم الصالحة هي:

    IOCB_FLAG_RESFD
        يجب أن يشير التحكم في الإدخال/الإخراج غير المتزامن إلى واصف الملف المذكور في aio_resfd عند الاكتمال.

    IOCB_FLAG_IOPRIO (منذ لينكس 4.18)
        فسّر حقل aio_reqprio كقيمة IOPRIO_VALUE كما هو معرّف في linux/ioprio.h.

aio_resfd
    وصف الملف للإشارة عند إكمال الإدخال/الإخراج غير المتزامن.

قيمة الإرجاع
عند النجاح، تُرجع io_submit() عدد كتل iocb المُرسلة (قد يكون أقل من n، أو 0 إذا كان n صفرًا).

عند الخطأ، تُعاد القيمة -1، ويُضبط errno للإشارة إلى الخطأ.

الأخطاء

EAGAIN
    الموارد المتاحة غير كافية لطابور أي كتل iocb.

EBADF
    وصف الملف المحدد في أول iocb غير صالح.

EFAULT
    إحدى بنيات البيانات تشير إلى بيانات غير صالحة.

EINVAL
    سياق AIO المحدد بواسطة ctx_id غير صالح.

EINVAL
    n أقل من 0.

EINVAL
    كتلة iocb عند *iocbpp[0] غير مهيأة بشكل صحيح.

EINVAL
    العملية المحددة غير صالحة لوصف الملف في iocb.

EINVAL
    القيمة في حقل aio_reqprio غير صالحة.

ENOSYS
    io_submit() غير مطبّقة على هذه البنية.

EPERM
    حقل aio_reqprio مضبوط بالفئة IOPRIO_CLASS_RT، لكن سياق الإرسال لا يمتلك القدرة CAP_SYS_ADMIN.

الإصدارات
توفر libaio (https://pagure.io/libaio) دالة تغليف تحمل الاسم نفسه، ولكن بنموذج أولي وقيمة إرجاع مختلفين. من المرجح أنك تريد استخدام دالة التغليف تلك.

المعايير
لينكس.

التاريخ
لينكس 2.5.

انظر أيضًا
io_cancel(2), io_destroy(2), io_getevents(2), io_setup(2), io_submit(3), aio(7)

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

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

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