.\" -*- coding: UTF-8 -*- .\" Copyright 2005-2008, 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 pipe 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم pipe, pipe2 \- إنشاء أنبوب .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBint pipe(int \fP\fIpipefd\fP\fB[2]);\fP .P \fB#define _GNU_SOURCE\fP /* انظر feature_test_macros(7) */ \fB#include \fP /* تعريف ثوابت \fBO_*\fP */ \fB#include \fP .P \fBint pipe2(int \fP\fIpipefd\fP\fB[2], int \fP\fIflags\fP\fB);\fP .P /* في أنظمة Alpha وIA\-64 وMIPS وSuperH وSPARC/SPARC64، يكون للوظيفة pipe() النموذج الأولي التالي؛ انظر VERSIONS */ .P \fB#include \fP .P \fBstruct fd_pair {\fP \fBlong fd[2];\fP \fB};\fP \fBstruct fd_pair pipe(void);\fP .fi .SH الوصف \fBpipe\fP() ينشئ أنبوبًا، قناة بيانات أحادية الاتجاه يمكن استخدامها للتواصل بين العمليات. المصفوفة \fIpipefd\fP تُستخدم لإرجاع واصفي ملف يشيران إلى طرفي الأنبوب. \fIpipefd[0]\fP يشير إلى طرف القراءة للأنبوب. \fIpipefd[1]\fP يشير إلى طرف الكتابة للأنبوب. البيانات المكتوبة في طرف الكتابة للأنبوب تُخزن مؤقتًا بواسطة النواة حتى تُقرأ من طرف القراءة للأنبوب. لمزيد من التفاصيل، انظر \fBpipe\fP(7). .P إذا كانت \fIflags\fP تساوي 0، فإن \fBpipe2\fP() مماثلة لـ \fBpipe\fP(). يمكن إجراء عملية OR على البتات للقيم التالية في \fIflags\fP للحصول على سلوك مختلف: .TP \fBO_CLOEXEC\fP اضبط علم الإغلاق عند التنفيذ (\fBFD_CLOEXEC\fP) على واصفي الملف الجديدين. انظر وصف نفس العلم في \fBopen\fP(2) لأسباب قد تجعل هذا مفيدًا. .TP \fBO_DIRECT\fP (منذ Linux 3.4) .\" commit 9883035ae7edef3ec62ad215611cb8e17d6a1a5d أنشئ أنبوبًا يؤدي الإدخال/الإخراج في وضع "الحزمة". كل \fBwrite\fP(2) إلى الأنبوب يُعالج كحزمة منفصلة، وقراءات \fBread\fP(2) من الأنبوب ستقرأ حزمة واحدة في كل مرة. لاحظ النقاط التالية: .RS .IP \[bu] 3 الكتابات التي تزيد عن \fBPIPE_BUF\fP بايت (انظر \fBpipe\fP(7)) ستُقسم إلى حزم متعددة. الثابت \fBPIPE_BUF\fP مُعرف في \fI\fP. .IP \[bu] إذا حددت \fBread\fP(2) حجم مخزن مؤقت أصغر من الحزمة التالية، فسيُقرأ العدد المطلوب من البايتات، وتُتجاهل البايتات الزائدة في الحزمة. تحديد حجم مخزن مؤقت بقيمة \fBPIPE_BUF\fP سيكون كافيًا لقراءة أكبر الحزم الممكنة (انظر النقطة السابقة). .IP \[bu] الحزم ذات الطول الصفري غير مدعومة. (\fBread\fP(2) التي تحدد حجم مخزن مؤقت صفري هي عملية لا تفعل شيئًا، وتُرجع 0.) .RE .IP النوى الأقدم التي لا تدعم هذا العلم ستشير إلى ذلك عبر خطأ \fBEINVAL\fP. .IP .\" commit 0dbf5f20652108106cb822ad7662c786baaa03ff .\" FIXME . But, it is not possible to specify O_DIRECT when opening a FIFO منذ Linux 4.5، من الممكن تغيير إعداد \fBO_DIRECT\fP لواصف ملف أنبوب باستخدام \fBfcntl\fP(2). .TP \fBO_NONBLOCK\fP اضبط علم حالة الملف \fBO_NONBLOCK\fP على أوصاف الملف المفتوحة المشار إليها بواسطة واصفي الملف الجديدين. استخدام هذا العلم يوفر استدعاءات إضافية لـ \fBfcntl\fP(2) لتحقيق نفس النتيجة. .TP \fBO_NOTIFICATION_PIPE\fP .\" commit c73be61cede5882f9605a852414db559c0ebedfd منذ Linux 5.8، آلية الإشعار العامة مبنية فوق الأنبوب حيث تقوم النواة بوصل رسائل الإشعار في الأنابيب المفتوحة بواسطة مساحة المستخدم. يجب على مالك الأنبوب إخبار النواة بمصادر الأحداث التي يجب مراقبتها، ويمكن أيضًا تطبيق مرشحات لاختيار الأحداث الفرعية التي يجب وضعها في الأنبوب. .SH "قيمة الإرجاع" عند النجاح، يُعاد صفر. عند الخطأ، يُعاد \-1، ويُضبط \fIerrno\fP للإشارة إلى الخطأ، ويُترك \fIpipefd\fP دون تغيير. .P .\" http://austingroupbugs.net/view.php?id=467 على Linux (وأنظمة أخرى)، \fBpipe\fP() لا تُعدل \fIpipefd\fP عند الفشل. تمت إضافة متطلب لتوحيد هذا السلوك في POSIX.1\-2008 TC2. استدعاء النظام الخاص بـ Linux \fBpipe2\fP() بالمثل لا يُعدل \fIpipefd\fP عند الفشل. .SH الأخطاء .TP \fBEFAULT\fP \fIpipefd\fP غير صالح. .TP \fBEINVAL\fP (\fBpipe2\fP()) قيمة غير صالحة في \fIflags\fP. .TP \fBEMFILE\fP وُصل إلى الحد الأقصى لواصفات الملفات المفتوحة لكل عملية. .TP \fBENFILE\fP وُصل إلى الحد الأقصى لإجمالي عدد الملفات المفتوحة على مستوى النظام. .TP \fBENFILE\fP تم الوصول إلى الحد الصعب للمستخدم على الذاكرة التي يمكن تخصيصها للأنابيب والمتصل ليس له صلاحية؛ انظر \fBpipe\fP(7). .TP \fBENOPKG\fP (\fBpipe2\fP()) تم تمرير \fBO_NOTIFICATION_PIPE\fP في \fIflags\fP ودعم الإشعارات (\fBCONFIG_WATCH_QUEUE\fP) غير مُجمّع في النواة. .SH الإصدارات .\" See http://math-atlas.sourceforge.net/devel/assembly/64.psabi.1.33.ps.Z .\" for example, section 3.2.1 "Registers and the Stack Frame". واجهة System V ABI على بعض البنى تسمح باستخدام أكثر من مسجل لإرجاع قيم متعددة؛ عدة بنى (وهي Alpha وIA\-64 وMIPS وSuperH وSPARC/SPARC64) (تساء) استخدام هذه الميزة لتنفيذ استدعاء النظام \fBpipe\fP() بطريقة وظيفية: الاستدعاء لا يأخذ أي وسيطات ويُرجع زوجًا من واصفي الملف كقيمة إرجاع عند النجاح. دالة الغلاف glibc \fBpipe\fP() تتعامل مع هذا بشفافية. انظر \fBsyscall\fP(2) للحصول على معلومات حول المسجلات المستخدمة لتخزين واصف الملف الثاني. .SH المعايير POSIX.1\-2024. .SH التاريخ .TP \fBpipe\fP() POSIX.1\-2001. .TP \fBpipe2\fP() POSIX.1\-2024. Linux 2.6.27, glibc 2.9. .SH أمثلة .\" fork.2 refers to this example program. البرنامج التالي ينشئ أنبوبًا، ثم يستدعي \fBfork\fP(2) لإنشاء عملية طفل؛ يرث الطفل مجموعة مكررة من واصفي الملف التي تشير إلى نفس الأنبوب. بعد \fBfork\fP(2)، تغلق كل عملية واصفات الملف التي لا تحتاجها للأنبوب (انظر \fBpipe\fP(7)). ثم يكتب الأب السلسلة الموجودة في وسيطة سطر الأوامر للبرنامج إلى الأنبوب، ويقرأ الطفل هذه السلسلة بايتًا بايتًا من الأنبوب ويطبعها على المخرجات القياسية. .SS "مصدر البرنامج" .\" SRC BEGIN (pipe.c) .EX #include #include #include #include #include #include #include \& int main(int argc, char *argv[]) { int pipefd[2]; char buf; pid_t cpid; \& if (argc != 2) { fprintf(stderr, "Usage: %s \[rs]n", argv[0]); exit(EXIT_FAILURE); } \& if (pipe(pipefd) == \-1) err(EXIT_FAILURE, "pipe"); \& cpid = fork(); if (cpid == \-1) err(EXIT_FAILURE, "fork"); \& if (cpid == 0) { /* Child reads from pipe */ if (close(pipefd[1]) == \-1) /* Close unused write end */ err(EXIT_FAILURE, "close"); \& while (read(pipefd[0], &buf, 1) > 0) { if (write(STDOUT_FILENO, &buf, 1) != 1) err(EXIT_FAILURE, "write"); } \& if (write(STDOUT_FILENO, "\[rs]n", 1) != 1) err(EXIT_FAILURE, "write"); if (close(pipefd[0]) == \-1) err(EXIT_FAILURE, "close"); _exit(EXIT_SUCCESS); \& } else { /* Parent writes argv[1] to pipe */ if (close(pipefd[0]) == \-1) /* Close unused read end */ err(EXIT_FAILURE, "close"); if (write(pipefd[1], argv[1], strlen(argv[1])) != strlen(argv[1])) err(EXIT_FAILURE, "write"); if (close(pipefd[1]) == \-1) /* Reader will see EOF */ err(EXIT_FAILURE, "close"); if (wait(NULL) == \-1) /* Wait for child */ err(EXIT_FAILURE, "wait"); exit(EXIT_SUCCESS); } } .EE .\" SRC END .SH "انظر أيضًا" \fBfork\fP(2), \fBread\fP(2), \fBsocketpair\fP(2), \fBsplice\fP(2), \fBtee\fP(2), \fBvmsplice\fP(2), \fBwrite\fP(2), \fBpopen\fP(3), \fBpipe\fP(7) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .