| io_submit(2) | System Calls Manual | 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 دالة تغليف تحمل الاسم نفسه، ولكن بنموذج أولي وقيمة إرجاع مختلفين. من المرجح أنك تريد استخدام دالة التغليف تلك.
المعايير¶
لينكس.
التاريخ¶
لينكس 2.5.
انظر أيضًا¶
io_cancel(2), io_destroy(2), io_getevents(2), io_setup(2), io_submit(3), aio(7)
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 11 أبريل 2026 | صفحات دليل لينكس 6.18 |