Scroll to navigation

vmsplice(2) System Calls Manual 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 المنطقية:

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

قيمة الإرجاع

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

الأخطاء

حُدد SPLICE_F_NONBLOCK في flags، وستؤدي العملية إلى الحظر.
fd إما غير صالح، أو لا يشير إلى أنبوب.
nr_segs أكبر من IOV_MAX؛ أو الذاكرة غير محاذاة إذا ضُبط SPLICE_F_GIFT.
نفدت الذاكرة.

المعايير

لينكس.

التاريخ

لينكس 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 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

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

8 فبراير 2026 صفحات دليل لينكس (لم تصدر بعد)