pidfd_getfd(2)

الاسم
pidfd_getfd - الحصول على نسخة مكررة من واصف ملف عملية أخرى

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

موجز
#include <sys/syscall.h>      /* تعريف ثوابت SYS_* */
#include <unistd.h>

int syscall(SYS_pidfd_getfd, int pidfd, int targetfd,
            unsigned int flags);

ملاحظة: لا توفر glibc غلافًا لـ pidfd_getfd()، مما يستلزم استخدام syscall(2).

الوصف
تخصص استدعاء النظام pidfd_getfd() واصف ملف جديد في العملية المستدعية. واصف الملف الجديد هذا هو نسخة مكررة من واصف ملف موجود، targetfd، في العملية المشار إليها بواسطة واصف ملف PID pidfd.

يشير واصف الملف المكرر إلى نفس وصف الملف المفتوح (انظر open(2)) مثل واصف الملف الأصلي في العملية المشار إليها بواسطة pidfd. وبالتالي، يتشارك واصفا الملف في أعلام حالة الملف وإزاحة الملف. علاوة على ذلك، يمكن تنفيذ العمليات على كائن الملف الأساسي (على سبيل المثال، تعيين عنوان لكائن مقبس باستخدام bind(2)) بنفس القدر عبر واصف الملف المكرر.

يتم تعيين علم الإغلاق عند التنفيذ (FD_CLOEXEC؛ انظر fcntl(2)) على واصف الملف الذي يعيده pidfd_getfd().

وسيطة flags محجوزة للاستخدام المستقبلي. حاليًا، يجب تحديدها كـ 0.

يخضع الإذن بنسخ واصف ملف عملية أخرى لفحص وضع وصول ptrace PTRACE_MODE_ATTACH_REALCREDS (انظر ptrace(2)).

قيمة الإرجاع
عند النجاح، يعيد pidfd_getfd() واصف ملف (عدد صحيح غير سالب). عند الخطأ، يتم إرجاع -1 ويتم تعيين errno للإشارة إلى الخطأ.

الأخطاء

EBADF
    pidfd ليس واصف ملف PID صالحاً.

EBADF
    targetfd ليس واصف ملف مفتوحًا في العملية المشار إليها بواسطة pidfd.

EINVAL
    flags ليست 0.

EMFILE
    وُصل إلى الحد الأقصى لعدد واصفات الملفات المفتوحة لكل عملية (انظر وصف RLIMIT_NOFILE في getrlimit(2)).

ENFILE
    وُصل إلى الحد الأقصى لإجمالي عدد الملفات المفتوحة على مستوى النظام.

EPERM
    لم تمتلك العملية المستدعية أذونات PTRACE_MODE_ATTACH_REALCREDS (انظر ptrace(2)) على العملية المشار إليها بواسطة pidfd.

ESRCH
    العملية المشار إليها بواسطة pidfd غير موجودة (أي أنها أنهت عملها وتم الانتظار عليها).

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

التاريخ
لينكس 5.6.

ملاحظات
للحصول على وصف لواصفات ملفات PID، انظر pidfd_open(2).

تأثير pidfd_getfd() مشابه لاستخدام رسائل SCM_RIGHTS الموصوفة في unix(7)، لكنه يختلف في الجوانب التالية:

•   من أجل تمرير واصف ملف باستخدام رسالة SCM_RIGHTS، يجب على العمليتين أولاً إنشاء اتصال مقبس نطاق UNIX.

•   يتطلب استخدام SCM_RIGHTS تعاونًا من جانب العملية التي يتم نسخ واصف ملفها. على النقيض من ذلك، لا يلزم مثل هذا التعاون عند استخدام pidfd_getfd().

•   تقتصر القدرة على استخدام pidfd_getfd() على فحص وضع وصول ptrace PTRACE_MODE_ATTACH_REALCREDS.

انظر أيضًا
clone3(2), dup(2), kcmp(2), pidfd_open(2)

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

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

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