.\" -*- coding: UTF-8 -*- .\" Copyright 1998, Pawel Krawczyk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-1-para .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH sendfile 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم sendfile \- نقل البيانات بين واصفات الملفات .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P .\" The below is too ugly. Comments about glibc versions belong .\" in the notes, not in the header. .\" .\" .B #include .\" .B #if (__GLIBC__==2 && __GLIBC_MINOR__>=1) || __GLIBC__>2 .\" .B #include .\" #else .\" .B #include .\" .B /* No system prototype before glibc 2.1. */ .\" .BI "ssize_t sendfile(int" " out_fd" ", int" " in_fd" ", off_t *" \ .\" offset ", size_t" " count" ) .\" .B #endif .\" \fBssize_t sendfile(int\fP\fI out_fd\fP\fB, int\fP\fI in_fd\fP\fB, off_t *_Nullable \fP\fIoffset\fP\fB,\fP \fB size_t \fP\fIcount\fP\fB);\fP .fi .SH الوصف \fBsendfile\fP() تنسخ البيانات بين واصف ملف وآخر. نظرًا لأن هذا النسخ يتم داخل النواة، فإن \fBsendfile\fP() أكثر كفاءة من الجمع بين \fBread\fP(2) و \fBwrite\fP(2)، والذي يتطلب نقل البيانات من وإلى مساحة المستخدم. .P يجب أن يكون \fIin_fd\fP واصف ملف مفتوحًا للقراءة، ويجب أن يكون \fIout_fd\fP واصفًا مفتوحًا للكتابة. .P إذا لم يكن \fIoffset\fP NULL، فإنه يشير إلى متغير يحمل إزاحة الملف التي سيبدأ منها \fBsendfile\fP() قراءة البيانات من \fIin_fd\fP. عند عودة \fBsendfile\fP()، سيتم تعيين هذا المتغير إلى إزاحة البايت الذي يلي آخر بايت تمت قراءته. إذا لم يكن \fIoffset\fP NULL، فإن \fBsendfile\fP() لا يعدل إزاحة ملف \fIin_fd\fP؛ وإلا يتم ضبط إزاحة الملف لتعكس عدد البايتات المقروءة من \fIin_fd\fP. .P إذا كان \fIoffset\fP NULL، فستتم قراءة البيانات من \fIin_fd\fP بدءًا من إزاحة الملف، وسيتم تحديث إزاحة الملف بواسطة الاستدعاء. .P \fIcount\fP هو عدد البايتات المطلوب نسخها بين واصفات الملفات. .P .\" commit b964bf53e540262f2d12672b3cca10842c0172e7 يجب أن تتوافق وسيطة \fIin_fd\fP مع ملف يدعم عمليات مشابهة لـ \fBmmap\fP(2) (أي لا يمكن أن يكون مقبسًا). باستثناء منذ Linux 5.12 وإذا كان \fIout_fd\fP أنبوبًا، ففي هذه الحالة يتحول \fBsendfile\fP() إلى \fBsplice\fP(2) وتنطبق قيوده. .P قبل Linux 2.6.33، يجب أن يشير \fIout_fd\fP إلى مقبس. منذ Linux 2.6.33 يمكن أن يكون أي ملف. إذا كان قابلاً للبحث، فإن \fBsendfile\fP() يغير إزاحة الملف بشكل مناسب. .SH "قيمة الإرجاع" إذا كان النقل ناجحًا، يتم إرجاع عدد البايتات المكتوبة إلى \fIout_fd\fP. لاحظ أن استدعاء ناجح لـ \fBsendfile\fP() قد يكتب بايتات أقل من المطلوب؛ يجب أن يكون المستدعي مستعدًا لإعادة الاستدعاء إذا كانت هناك بايتات غير مرسلة. انظر أيضًا الملاحظات. .P عند الخطأ، تُعاد القيمة \-1، ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEAGAIN\fP تم تحديد الإدخال/الإخراج غير المحظور باستخدام \fBO_NONBLOCK\fP وستؤدي الكتابة إلى الحظر. .TP \fBEBADF\fP لم يتم فتح ملف الإدخال للقراءة أو لم يتم فتح ملف الإخراج للكتابة. .TP \fBEFAULT\fP عنوان سيء. .TP \fBEINVAL\fP الواصف غير صالح أو مقفل، أو عملية مشابهة لـ \fBmmap\fP(2) غير متاحة لـ \fIin_fd\fP، أو \fIcount\fP سالب. .TP \fBEINVAL\fP \fIout_fd\fP لديه العلم \fBO_APPEND\fP مضبوطًا. هذا غير مدعوم حاليًا بواسطة \fBsendfile\fP(). .TP \fBEIO\fP خطأ غير محدد أثناء القراءة من \fIin_fd\fP. .TP \fBENOMEM\fP ذاكرة غير كافية للقراءة من \fIin_fd\fP. .TP \fBEOVERFLOW\fP \fIcount\fP كبير جدًا، ستؤدي العملية إلى تجاوز الحد الأقصى لحجم ملف الإدخال أو ملف الإخراج. .TP \fBESPIPE\fP \fIoffset\fP ليس NULL ولكن ملف الإدخال غير قابل للبحث. .SH الإصدارات تنفذ أنظمة UNIX الأخرى \fBsendfile\fP() بدلالات ونماذج أولية مختلفة. لا ينبغي استخدامه في البرامج المحمولة. .SH المعايير لا شيء. .SH التاريخ Linux 2.2, glibc 2.1. .P في Linux 2.4 والإصدارات الأقدم، يمكن أن يشير \fIout_fd\fP أيضًا إلى ملف عادي؛ اختفت هذه الإمكانية في سلسلة نواة Linux 2.6.x، ولكن تمت استعادتها في Linux 2.6.33. .P لم يتم تصميم استدعاء النظام الأصلي Linux \fBsendfile\fP() للتعامل مع إزاحات الملفات الكبيرة. وبالتالي، أضاف Linux 2.4 \fBsendfile64\fP()، بنوع أوسع لوسيطة \fIoffset\fP. تتعامل دالة الغلاف glibc \fBsendfile\fP() بشكل شفاف مع اختلافات النواة. .SH ملاحظات .\" commit e28cc71572da38a5a12c1cfe4d7032017adccf69 سينقل \fBsendfile\fP() على الأكثر 0x7ffff000 (2,147,479,552) بايت، مع إرجاع عدد البايتات المنقولة فعليًا. (هذا صحيح على كل من الأنظمة 32 بت و64 بت.) .P إذا كنت تخطط لاستخدام \fBsendfile\fP() لإرسال الملفات إلى مقبس TCP، ولكنك تحتاج إلى إرسال بعض بيانات الرأس أمام محتويات الملف، فستجد أنه من المفيد استخدام خيار \fBTCP_CORK\fP، الموصوف في \fBtcp\fP(7)، لتقليل عدد الحزم وضبط الأداء. .P قد ترغب التطبيقات في الرجوع إلى \fBread\fP(2) و \fBwrite\fP(2) في حالة فشل \fBsendfile\fP() مع \fBEINVAL\fP أو \fBENOSYS\fP. .P إذا كان \fIout_fd\fP يشير إلى مقبس أو أنبوب مع دعم النسخ الصفري، يجب على المستدعيين ضمان بقاء الأجزاء المنقولة من الملف المشار إليه بواسطة \fIin_fd\fP غير معدلة حتى يستهلك القارئ على الطرف الآخر من \fIout_fd\fP البيانات المنقولة. .P استدعاء \fBsplice\fP(2) الخاص بـ Linux يدعم نقل البيانات بين واصفات ملفات عشوائية بشرط أن يكون واحد (أو كليهما) منهما أنبوبًا. .SH "انظر أيضًا" \fBcopy_file_range\fP(2)، \fBmmap\fP(2)، \fBopen\fP(2)، \fBsocket\fP(2)، \fBsplice\fP(2) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .