popen(3)

الاسم
popen, pclose - دفق أنبوبي إلى أو من عملية

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

موجز
#include <stdio.h>

FILE *popen(const char *أمر, const char *نوع);
int pclose(FILE *دفق);

    متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

popen(), pclose():
    _POSIX_C_SOURCE >= 2
        || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

الوصف
تفتح الدالة popen() عملية بإنشاء أنبوب، واستنساخ، واستدعاء الصدفة. وبما أن الأنبوب أحادي الاتجاه بحكم التعريف، فقد يُحدد المعامل نوع القراءة أو الكتابة فقط، وليس كليهما؛ ويكون الدفق الناتج للقراءة فقط أو للكتابة فقط وفقًا لذلك.

المعامل أمر هو مؤشر لسلسلة محارف منتهية بقيمة خالية تحتوي على سطر أوامر الصدفة. يُمرر هذا الأمر إلى /bin/sh باستخدام العلم -c؛ ويُجرى التفسير، إن وُجد، بواسطة الصدفة.

المعامل نوع هو مؤشر لسلسلة محارف منتهية بقيمة خالية يجب أن تحتوي إما على الحرف 'r' للقراءة أو الحرف 'w' للكتابة. منذ glibc 2.9، يمكن لهذا المعامل أن يتضمن أيضًا الحرف 'e'، الذي يتسبب في تعيين علم الإغلاق عند التنفيذ (FD_CLOEXEC) على واصف الملف الأساسي؛ راجع وصف علم O_CLOEXEC في open(2) لأسباب قد يكون فيها ذلك مفيدًا.

قيمة الإرجاع من popen() هي دفق إدخال/إخراج قياسي عادي من جميع النواحي باستثناء أنه يجب إغلاقه باستخدام pclose() بدلاً من fclose(3). الكتابة إلى مثل هذا الدفق تكتب إلى الإدخال القياسي للأمر؛ والمخرج القياسي للأمر هو نفسه مخرج العملية التي استدعت popen()، ما لم يُغير ذلك بواسطة الأمر نفسه. بالمقابل، القراءة من الدفق تقرأ المخرج القياسي للأمر، والإدخال القياسي للأمر هو نفسه إدخال العملية التي استدعت popen().

لاحظ أن دفقات الإخراج popen() مخزنة مؤقتًا في كتل مبدئيًا.

تنتظر الدالة pclose() إنهاء العملية المرتبطة وتُعيد حالة خروج الأمر كما تُعيدها wait4(2).

قيمة الإرجاع
popen(): عند النجاح، تُعيد مؤشرًا لدفق مفتوح يمكن استخدامه للقراءة أو الكتابة إلى الأنبوب؛ إذا فشلت استدعاءات fork(2) أو pipe(2)، أو إذا لم تستطع الدالة تخصيص ذاكرة، تُعاد NULL.

pclose(): عند النجاح، تُعيد حالة خروج الأمر؛ إذا أعادت wait4(2) خطأ، أو اكتُشف خطأ آخر، تُعاد -1.

عند الفشل، تضبط كلتا الدالتين errno للإشارة إلى الخطأ.

الأخطاء
لا تضبط الدالة popen() errno إذا فشل تخصيص الذاكرة. إذا فشلت fork(2) أو pipe(2) الأساسية، يُضبط errno للإشارة إلى الخطأ. إذا كان المعامل نوع غير صالح، واكتُشفت هذه الحالة، يُضبط errno إلى EINVAL.

إذا لم تستطع pclose() الحصول على حالة الطفل، يُضبط errno إلى ECHILD.

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
popen(), pclose() | سلامة الخيوط | MT-Safe

الإصدارات
قيمة 'e' لـ نوع هي إضافة لينكس.

المعايير
POSIX.1-2008.

التاريخ
POSIX.1-2001.

تحذيرات
اقرأ التحذيرات في system(3) بعناية.

العلل
بما أن الإدخال القياسي لأمر مفتوح للقراءة يشارك إزاحة البحث الخاصة به مع العملية التي استدعت popen()، إذا أجرت العملية الأصلية قراءة مخزنة، فقد لا يكون موضع إدخال الأمر كما هو متوقع. وبالمثل، قد يختلط الإخراج من أمر مفتوح للكتابة مع إخراج العملية الأصلية. يمكن تجنب الأخير باستدعاء fflush(3) قبل popen().

فشل تنفيذ الصدفة لا يمكن تمييزه عن فشل الصدفة في تنفيذ الأمر، أو خروج فوري للأمر. الدليل الوحيد هو حالة خروج 127.

انظر أيضًا
sh(1)، fork(2)، pipe(2)، wait4(2)، fclose(3)، fflush(3)، fopen(3)، stdio(3)، system(3)

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

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

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