.\" -*- coding: UTF-8 -*- .\" Copyright 1992, Drew Eckhardt .\" Copyright 2005-2014, Michael Kerrisk .\" 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 dup 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم dup, dup2, dup3 \- نسخ واصف ملف .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBint dup(int \fP\fIoldfd\fP\fB);\fP \fBint dup2(int \fP\fIoldfd\fP\fB, int \fP\fInewfd\fP\fB);\fP .P \fB#define _GNU_SOURCE\fP /* انظر feature_test_macros(7) */ \fB#include \fP /* تعريف ثوابت \fBO_*\fP */ \fB#include \fP .P \fBint dup3(int \fP\fIoldfd\fP\fB, int \fP\fInewfd\fP\fB, int \fP\fIflags\fP\fB);\fP .fi .SH الوصف نداء النظام \fBdup\fP() يخصص واصف ملف جديد يشير إلى نفس وصف الملف المفتوح مثل الواصف \fIoldfd\fP. (لشرح وصف الملف المفتوح، انظر \fBopen\fP(2).) رقم واصف الملف الجديد مضمون ليكون أقل واصف ملف مرقم غير مستخدم في العملية المستدعية. .P بعد العودة الناجحة، يمكن استخدام واصفات الملف القديمة والجديدة بالتبادل. نظرًا لأن واصفي الملف يشيران إلى نفس وصف الملف المفتوح، فإنهما يشاركان إزاحة الملف وأعلام حالة الملف؛ على سبيل المثال، إذا تم تعديل إزاحة الملف باستخدام \fBlseek\fP(2) على أحد واصفي الملف، فإن الإزاحة تتغير أيضًا لواصف الملف الآخر. .P .\" واصفا الملف لا يشاركان أعلام واصف الملف (علم الإغلاق عند التنفيذ). علم الإغلاق عند التنفيذ (\fBFD_CLOEXEC\fP؛ انظر \fBfcntl\fP(2)) للواصف المكرر يكون مغلقًا. .SS dup2() نداء النظام \fBdup2\fP() يؤدي نفس مهمة \fBdup\fP()، ولكن بدلاً من استخدام أقل واصف ملف غير مستخدم مرقم، فإنه يستخدم رقم واصف الملف المحدد في \fInewfd\fP. بمعنى آخر، يتم ضبط واصف الملف \fInewfd\fP بحيث يشير الآن إلى نفس وصف الملف المفتوح مثل \fIoldfd\fP. .P إذا كان واصف الملف \fInewfd\fP مفتوحًا سابقًا، فإنه يُغلق قبل إعادة استخدامه؛ يتم الإغلاق بصمت (أي، أي أخطاء أثناء الإغلاق لا تُبلغ عنها \fBdup2\fP()). .P خطوات إغلاق وإعادة استخدام واصف الملف \fInewfd\fP تُنفذ \fIذريًا\fP. هذا مهم، لأن محاولة تنفيذ وظيفة مكافئة باستخدام \fBclose\fP(2) و \fBdup\fP() ستكون عرضة لحالات سباق، حيث قد يُعاد استخدام \fInewfd\fP بين الخطوتين. يمكن أن يحدث هذا إعادة الاستخدام لأن البرنامج الرئيسي يُقاطع بواسطة معالج إشارة يخصص واصف ملف، أو لأن خيطًا متوازيًا يخصص واصف ملف. .P لاحظ النقاط التالية: .IP \[bu] 3 إذا كان \fIoldfd\fP ليس واصف ملف صالحًا، فإن النداء يفشل، ولا يُغلق \fInewfd\fP. .IP \[bu] .\" إذا كان \fIoldfd\fP واصف ملف صالحًا، وكان \fInewfd\fP له نفس قيمة \fIoldfd\fP، فإن \fBdup2\fP() لا يفعل شيئًا، ويعيد \fInewfd\fP. .SS dup3() \fBdup3\fP() هو نفسه \fBdup2\fP()، باستثناء أن: .IP \[bu] 3 يمكن للمستدعي فرض تعيين علم الإغلاق عند التنفيذ لواصف الملف الجديد بتحديد \fBO_CLOEXEC\fP في \fIflags\fP. انظر وصف نفس العلم في \fBopen\fP(2) لأسباب قد تكون مفيدة. .IP \[bu] .\" Ulrich Drepper, LKML, 2008-10-09: .\" We deliberately decided on this change. Otherwise, what is the .\" result of dup3(fd, fd, O_CLOEXEC)? إذا كان \fIoldfd\fP يساوي \fInewfd\fP، فإن \fBdup3\fP() يفشل مع الخطأ \fBEINVAL\fP. .SH "قيمة الإرجاع" عند النجاح، تعيد نداءات النظام هذه واصف الملف الجديد. عند الخطأ، يُعاد \-1، ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEBADF\fP \fIoldfd\fP ليس واصف ملف مفتوح. .TP \fBEBADF\fP \fInewfd\fP خارج النطاق المسموح لواصفات الملف (انظر مناقشة \fBRLIMIT_NOFILE\fP في \fBgetrlimit\fP(2)). .TP \fBEBUSY\fP (لينكس فقط) قد يُعاد هذا بواسطة \fBdup2\fP() أو \fBdup3\fP() أثناء حالة سباق مع \fBopen\fP(2) و \fBdup\fP(). .TP \fBEINTR\fP نداء \fBdup2\fP() أو \fBdup3\fP() قُطع بواسطة إشارة؛ انظر \fBsignal\fP(7). .TP \fBEINVAL\fP (\fBdup3\fP()) \fIflags\fP يحتوي على قيمة غير صالحة. .TP \fBEINVAL\fP (\fBdup3\fP()) \fIoldfd\fP كان مساويًا لـ \fInewfd\fP. .TP \fBEMFILE\fP تم الوصول إلى الحد لكل عملية لعدد واصفات الملف المفتوحة (انظر مناقشة \fBRLIMIT_NOFILE\fP في \fBgetrlimit\fP(2)). .TP \fBENOMEM\fP ذاكرة النواة المتوفرة غير كافية. .SH المعايير POSIX.1\-2024. .SH التاريخ .TP \fBdup\fP() .TQ \fBdup2\fP() .\" SVr4 documents additional .\" EINTR and ENOLINK error conditions. POSIX.1 adds EINTR. .\" The EBUSY return is Linux-specific. 4.3BSD، SVr4، POSIX.1\-1988. .TP \fBdup3\fP() POSIX.1\-2024. Linux 2.6.27, glibc 2.9. .SH ملاحظات الخطأ الذي تعيده \fBdup2\fP() يختلف عن ذلك الذي تعيده \fBfcntl(\fP..., \fBF_DUPFD\fP, ...\fB)\fP عندما يكون \fInewfd\fP خارج النطاق. على بعض الأنظمة، \fBdup2\fP() أيضًا يعيد أحيانًا \fBEINVAL\fP مثل \fBF_DUPFD\fP. .P إذا كان \fInewfd\fP مفتوحًا، فإن أي أخطاء كان سيُبلغ عنها في وقت \fBclose\fP(2) تُفقد. إذا كان هذا مقلقًا، فإن\[em]ما لم يكن البرنامج أحادي الخيط ولا يخصص واصفات ملف في معالجات الإشارات\[em]النهج الصحيح هو \fIعدم\fP إغلاق \fInewfd\fP قبل استدعاء \fBdup2\fP()، بسبب حالة السباق الموصوفة أعلاه. بدلاً من ذلك، يمكن استخدام كود مثل التالي: .P .in +4n .EX /* Obtain a duplicate of \[aq]newfd\[aq] that can subsequently be used to check for close() errors; an EBADF error means that \[aq]newfd\[aq] was not open. */ \& tmpfd = dup(newfd); if (tmpfd == \-1 && errno != EBADF) { /* Handle unexpected dup() error. */ } \& /* Atomically duplicate \[aq]oldfd\[aq] on \[aq]newfd\[aq]. */ \& if (dup2(oldfd, newfd) == \-1) { /* Handle dup2() error. */ } \& /* Now check for close() errors on the file originally referred to by \[aq]newfd\[aq]. */ \& if (tmpfd != \-1) { if (close(tmpfd) == \-1) { /* Handle errors from close. */ } } .EE .in .SH "انظر أيضًا" \fBclose\fP(2), \fBfcntl\fP(2), \fBopen\fP(2), \fBpidfd_getfd\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 .