vmsplice(2)

الاسم
vmsplice - وصل صفحات المستخدم من/إلى أنبوب

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

موجز
#define _GNU_SOURCE         /* انظر feature_test_macros(7) */
#include <fcntl.h>

ssize_t vmsplice(int fd, const struct iovec *iov,
                 size_t nr_segs, unsigned int flags);

الوصف
إذا كان fd مفتوحًا للكتابة، فإن استدعاء النظام vmsplice() يربط nr_segs نطاقًا من ذاكرة المستخدم الموصوفة بواسطة iov في أنبوب. إذا كان fd مفتوحًا للقراءة، فإن استدعاء النظام vmsplice() يملأ nr_segs نطاقًا من ذاكرة المستخدم الموصوفة بواسطة iov من أنبوب. يجب أن يشير واصف الملف fd إلى أنبوب.

يشير المؤشر iov إلى مصفوفة من بنى iovec كما هو موصوف في iovec(3type).

المعامل flags هو قناع بتات (bit mask) يتكون من دمج صفر أو أكثر من القيم التالية باستخدام عملية OR المنطقية:

SPLICE_F_MOVE
    غير مستخدم لـ vmsplice()؛ انظر splice(2).

SPLICE_F_NONBLOCK
    لا تعيق الإدخال/الإخراج؛ انظر splice(2) لمزيد من التفاصيل.

SPLICE_F_MORE
    ليس له تأثير حاليًا على vmsplice()، ولكن قد يُنفذ في المستقبل؛ انظر splice(2).

SPLICE_F_GIFT
    صفحات المستخدم هي هدية للنواة. لا يجوز للتطبيق تعديل هذه الذاكرة أبدًا، وإلا فقد تختلف خبيئة الصفحة والبيانات على القرص. إهداء الصفحات للنواة يعني أن splice(2) لاحقًا مع SPLICE_F_MOVE يمكنه نقل الصفحات بنجاح؛ إذا لم يُحدد هذا العلم، فإن splice(2) لاحقًا مع SPLICE_F_MOVE يجب أن ينسخ الصفحات. يجب أيضًا أن تكون البيانات محاذاة للصفحة بشكل صحيح، سواء في الذاكرة أو الطول.

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

الأخطاء

EAGAIN
    حُدد SPLICE_F_NONBLOCK في flags، وستؤدي العملية إلى الحظر.

EBADF
    fd إما غير صالح، أو لا يشير إلى أنبوب.

EINVAL
    nr_segs أكبر من IOV_MAX؛ أو الذاكرة غير محاذاة إذا ضُبط SPLICE_F_GIFT.

ENOMEM
    نفدت الذاكرة.

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

التاريخ
لينكس 2.6.17، glibc 2.5.

ملاحظات
يتبع vmsplice() دوال القراءة/الكتابة المتجهة الأخرى فيما يتعلق بالقيود على عدد المقاطع الممررة. هذا الحد هو IOV_MAX كما هو معرف في <limits.h>. حاليًا، هذا الحد هو 1024.

يدعم vmsplice() حقًا الوصل الحقيقي فقط من ذاكرة المستخدم إلى أنبوب. في الاتجاه المعاكس، ينسخ البيانات فقط إلى مساحة المستخدم. لكن هذا يجعل الواجهة لطيفة ومتناظرة ويمكّن الأشخاص من البناء على vmsplice() مع مجال للتحسين المستقبلي في الأداء.

انظر أيضًا
splice(2), tee(2), pipe(7)

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

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

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