.\" -*- coding: UTF-8 -*- .\" Copyright 2015, Anna Schumaker .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH copy_file_range 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم copy_file_range \- نسخ نطاق من البيانات من ملف إلى آخر .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#define _GNU_SOURCE\fP \fB#define _FILE_OFFSET_BITS 64\fP \fB#include \fP .P \fBssize_t copy_file_range(int \fP\fIfd_in\fP\fB, off_t *_Nullable \fP\fIoff_in\fP\fB,\fP \fB int \fP\fIfd_out\fP\fB, off_t *_Nullable \fP\fIoff_out\fP\fB,\fP \fB size_t \fP\fIsize\fP\fB, unsigned int \fP\fIflags\fP\fB);\fP .fi .SH الوصف استدعاء النظام \fBcopy_file_range\fP() ينفذ نسخًا داخل النواة بين واصفي ملفين دون التكلفة الإضافية لنقل البيانات من النواة إلى مساحة المستخدم ثم العودة إلى النواة. ينسخ حتى \fIsize\fP بايت من البيانات من واصف الملف المصدر \fIfd_in\fP إلى واصف الملف الهدف \fIfd_out\fP، مع استبدال أي بيانات موجودة ضمن النطاق المطلوب من الملف الهدف. .P تنطبق الدلالات التالية على \fIoff_in\fP، وتنطبق عبارات مماثلة على \fIoff_out\fP: .IP \[bu] 3 إذا كان \fIoff_in\fP فارغًا (NULL)، تُقرأ البايتات من \fIfd_in\fP بدءًا من إزاحة الملف، ويُضبط إزاحة الملف بعدد البايتات المنسوخة. .IP \[bu] إذا لم يكن \fIoff_in\fP فارغًا (NULL)، يجب أن يشير \fIoff_in\fP إلى مخزن مؤقت يحدد إزاحة البداية حيث ستُقرأ البايتات من \fIfd_in\fP. لا تتغير إزاحة ملف \fIfd_in\fP، لكن يُضبط \fIoff_in\fP بشكل مناسب. .P يمكن أن يشير \fIfd_in\fP و \fIfd_out\fP إلى نفس الملف. إذا كانا يشيران إلى نفس الملف، فلا يُسمح بتداخل نطاقي المصدر والهدف. .P وُفر المعامل \fIflags\fP للسماح بالتوسعات المستقبلية ويجب ضبطه حاليًا على 0. .SH "قيمة الإرجاع" عند الإكمال بنجاح، يُرجع \fBcopy_file_range\fP() عدد البايتات المنسوخة بين الملفات. قد يكون هذا أقل من الحجم المطلوب أصلاً. إذا كانت إزاحة ملف \fIfd_in\fP عند نهاية الملف أو بعدها، لا تُنسخ أي بايتات، ويُرجع \fBcopy_file_range\fP() صفرًا. .P عند الخطأ، يُرجع \fBcopy_file_range\fP() \-1 ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEBADF\fP واصف ملف واحد أو أكثر غير صالح. .TP \fBEBADF\fP \fIfd_in\fP غير مفتوح للقراءة؛ أو \fIfd_out\fP غير مفتوح للكتابة. .TP \fBEBADF\fP عُيّنت علامة \fBO_APPEND\fP لوصف الملف المفتوح (انظر \fBopen\fP(2)) المشار إليه بواصف الملف \fIfd_out\fP. .TP \fBEFBIG\fP جرت محاولة للكتابة في موضع يتجاوز أقصى إزاحة ملف تدعمها النواة. .TP \fBEFBIG\fP جرت محاولة لكتابة نطاق يتجاوز الحد الأقصى المسموح به لحجم الملف. يختلف الحد الأقصى لحجم الملف بين تطبيقات نظام الملفات ويمكن أن يكون مختلفًا عن أقصى إزاحة ملف مسموح بها. .TP \fBEFBIG\fP جرت محاولة للكتابة تتجاوز حد مورد حجم ملف العملية. قد يؤدي هذا أيضًا إلى استلام العملية إشارة \fBSIGXFSZ\fP. .TP \fBEINVAL\fP وسيطة \fIflags\fP ليست 0. .TP \fBEINVAL\fP يشير \fIfd_in\fP و \fIfd_out\fP إلى نفس الملف وتتداخل نطاقات المصدر والهدف. .TP \fBEINVAL\fP إما \fIfd_in\fP أو \fIfd_out\fP ليس ملفًا عاديًا. .TP \fBEIO\fP حدث خطأ إدخال/إخراج منخفض المستوى أثناء النسخ. .TP \fBEISDIR\fP إما \fIfd_in\fP أو \fIfd_out\fP يشير إلى دليل. .TP \fBENOMEM\fP نفدت الذاكرة. .TP \fBENOSPC\fP لا توجد مساحة كافية على نظام الملفات الهدف لإكمال النسخ. .TP \fBEOPNOTSUPP\fP (منذ لينكس 5.19) .\" commit 868f9f2f8e004bfe0d3935b1976f625b2924893b نظام الملفات لا يدعم هذه العملية. .TP \fBEOVERFLOW\fP نطاق المصدر أو الوجهة المطلوب كبير جدًا بحيث لا يمكن تمثيله في أنواع البيانات المحددة. .TP \fBEPERM\fP \fIfd_out\fP يشير إلى ملف غير قابل للتغيير. .TP \fBETXTBSY\fP إما \fIfd_in\fP أو \fIfd_out\fP يشير إلى ملف مبادلة نشط. .TP \fBEXDEV\fP (قبل لينكس 5.3) .\" commit 5dae222a5ff0c269730393018a5539cc970a4726 الملفات المشار إليها بواسطة \fIfd_in\fP و \fIfd_out\fP ليست على نفس نظام الملفات. .TP \fBEXDEV\fP (منذ لينكس 5.19) .\" commit 868f9f2f8e004bfe0d3935b1976f625b2924893b الملفات المشار إليها بواسطة \fIfd_in\fP و \fIfd_out\fP ليست على نفس نظام الملفات، وأنظمة الملفات المصدر والهدف ليست من نفس النوع، أو لا تدعم النسخ عبر أنظمة الملفات. .SH الإصدارات حدثت إعادة صياغة رئيسية لتنفيذ النواة في لينكس 5.3. تم توضيح مجالات واجهة برمجة التطبيقات التي لم تكن محددة بوضوح، ويتم فحص حدود واجهة برمجة التطبيقات بشكل أكثر صرامة من النوى السابقة. .P منذ لينكس 5.19، يمكن تحقيق النسخ عبر أنظمة الملفات عندما يكون كلا نظامي الملفات من نفس النوع، وينفذ نظام الملفات ذلك الدعم. انظر BUGS للسلوك قبل لينكس 5.19. .P يجب أن تستهدف التطبيقات سلوك ومتطلبات لينكس 5.19، والتي تم أيضًا نقلها إلى النوى المستقرة السابقة. .SH المعايير لينكس، جنو. .SH التاريخ لينكس 4.5. .P .\" glibc.git bad7a0c81f50 (2017-12-22; "copy_file_range: New function to copy file data") .\" glibc.git 5a659ccc0ec2 (2019-06-28; "io: Remove copy_file_range emulation [BZ #24744]") قبل glibc 2.30، بدءًا من glibc 2.27، وفرت دالة الغلاف glibc تنفيذًا احتياطيًا في مساحة المستخدم عندما لم تنفذ النواة استدعاء النظام هذا. منذ glibc 2.30، تمت إزالة ذلك الاحتياطي؛ تفشل الدالة الآن مع ENOSYS إذا كانت النواة تفتقر إلى دعم .BR copy_file_range (). .SH ملاحظات إذا كان \fIfd_in\fP ملفًا متناثرًا، فقد يقوم \fBcopy_file_range\fP() بتوسيع أي ثغرات موجودة في النطاق المطلوب. قد يستفيد المستخدمون من استدعاء \fBcopy_file_range\fP() في حلقة، واستخدام عمليات \fBlseek\fP(2) \fBSEEK_DATA\fP و \fBSEEK_HOLE\fP للعثور على مواقع مقاطع البيانات. .P يمنح \fBcopy_file_range\fP() أنظمة الملفات فرصة لتنفيذ تقنيات "تسريع النسخ"، مثل استخدام إعادة الروابط (أي اثنين أو أكثر من العقد التي تشترك في مؤشرات لنفس كتل القرص القابلة للنسخ عند الكتابة) أو النسخ من جانب الخادم (في حالة NFS). .P يجب تعريف \fB_FILE_OFFSET_BITS\fP على أنه 64 في الكود الذي يستخدم \fIoff_in\fP أو \fIoff_out\fP غير فارغ أو الذي يأخذ عنوان \fBcopy_file_range\fP، إذا كان الكود مخصصًا ليكون محمولاً إلى منصات x86 و ARM التقليدية 32 بت حيث يكون عرض \fBoff_t\fP مبدئيًا 32 بت. .SH العلل في لينكس 5.3 إلى لينكس 5.18، تم تنفيذ النسخ عبر أنظمة الملفات بواسطة النواة، إذا لم تكن العملية مدعومة من قبل أنظمة الملفات الفردية. ومع ذلك، في بعض أنظمة الملفات الافتراضية، فشل الاستدعاء في النسخ، مع الإبلاغ عن النجاح. .SH أمثلة .\" SRC BEGIN (copy_file_range.c) .EX #define _GNU_SOURCE #define _FILE_OFFSET_BITS 64 #include #include #include #include #include #include \& int main(int argc, char *argv[]) { int fd_in, fd_out; off_t size, ret; struct stat stat; \& if (argc != 3) { fprintf(stderr, "الاستخدام: %s <المصدر> <الوجهة>\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& fd_in = open(argv[1], O_RDONLY); if (fd_in == \-1) { perror("open (argv[1])"); exit(EXIT_FAILURE); } \& if (fstat(fd_in, &stat) == \-1) { perror("fstat"); exit(EXIT_FAILURE); } \& size = stat.st_size; \& fd_out = open(argv[2], O_CREAT | O_WRONLY | O_TRUNC, 0644); if (fd_out == \-1) { perror("open (argv[2])"); exit(EXIT_FAILURE); } \& do { ret = copy_file_range(fd_in, NULL, fd_out, NULL, size, 0); if (ret == \-1) { perror("copy_file_range"); exit(EXIT_FAILURE); } \& size \-= ret; } while (size > 0 && ret > 0); \& close(fd_in); close(fd_out); exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "انظر أيضًا" \fBlseek\fP(2), \fBsendfile\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 .