stdin(3)

الاسم
stdin، stdout، stderr - تدفقات الإدخال/الإخراج المعيارية

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

موجز
#include <stdio.h>

extern FILE  *stdin;
extern FILE  *stdout;
extern FILE  *stderr;

الوصف
في الظروف العادية، يُفتح لكل برنامج UNIX ثلاثة تدفقات عند بدئه: واحد للإدخال، وواحد للإخراج، وواحد لطباعة رسائل التشخيص أو الأخطاء. تُربط هذه عادةً بمحطة المستخدم (انظر tty(4)) ولكن قد تشير بدلاً من ذلك إلى ملفات أو أجهزة أخرى، اعتمادًا على ما اختارته العملية الأم لإعداده. (انظر أيضًا قسم "إعادة التوجيه" في sh(1).)

يُشار إلى دفق الإدخال باسم "الإدخال المعياري"؛ ويُشار إلى دفق الإخراج باسم "الإخراج المعياري"؛ ويُشار إلى دفق الخطأ باسم "الخطأ المعياري". تُختصر هذه المصطلحات لتشكيل الرموز المستخدمة للإشارة إلى هذه الملفات، وهي stdin أو stdout أو stderr.

كل من هذه الرموز هو ماكرو stdio(3) من نوع مؤشر إلى FILE، ويمكن استخدامه مع دوال مثل fprintf(3) أو fread(3).

بما أن FILEs هي غلاف تخزين مؤقت حول واصفات ملفات UNIX، يمكن الوصول إلى نفس الملفات الأساسية باستخدام واجهة ملفات UNIX الخام، أي الدوال مثل read(2) وlseek(2).

عند بدء البرنامج، تكون واصفات الملفات الصحيحة المرتبطة بالتدفقات stdin وstdout وstderr هي 0 و1 و2 على التوالي. تُعرّف رموز المعالج الأولي STDIN_FILENO وSTDOUT_FILENO وSTDERR_FILENO بهذه القيم في <unistd.h>. (تطبيق freopen(3) على أحد هذه التدفقات يمكن أن يغير رقم واصف الملف المرتبط بالدفق.)

لاحظ أن خلط استخدام FILEs وواصفات الملفات الخام يمكن أن ينتج نتائج غير متوقعة ويجب تجنبه عمومًا. (للمازوشيين بينكم: يصف POSIX.1، القسم 8.2.3، بالتفصيل كيف يُفترض أن يعمل هذا التفاعل.) القاعدة العامة هي أن واصفات الملفات تُعالج في النواة، بينما stdio هي مجرد مكتبة. هذا يعني مثلاً أنه بعد exec(3)، ترث العملية الابنة جميع واصفات الملفات المفتوحة، لكن جميع التدفقات القديمة تصبح غير قابلة للوصول.

بما أن الرموز stdin وstdout وstderr محددة لتكون ماكرو، فإن الإسناد إليها غير محمول. يمكن جعل التدفقات المعيارية تشير إلى ملفات مختلفة بمساعدة دالة المكتبة freopen(3)، التي أُدخلت خصيصًا لجعل إعادة تعيين stdin وstdout وstderr ممكنة. تُغلق التدفقات المعيارية باستدعاء exit(3) وعند إنهاء البرنامج العادي.

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

تنص المعايير أيضًا على أن هذه التدفقات الثلاثة يجب أن تكون مفتوحة عند بدء البرنامج.

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

ملاحظات
الدفق stderr غير مخزن مؤقتًا. الدفق stdout مخزن مؤقتًا سطريًا عندما يشير إلى محطة طرفية. لن تظهر الأسطر الجزئية حتى يُستدعى fflush(3) أو exit(3)، أو يُطبع سطر جديد. يمكن أن ينتج عن هذا نتائج غير متوقعة، خاصة مع إخراج التصحيح. يمكن تغيير وضع التخزين المؤقت للتدفقات المعيارية (أو أي دفق آخر) باستخدام استدعاء setbuf(3) أو setvbuf(3). لاحظ أنه في حالة ارتباط stdin بمحطة طرفية، قد يكون هناك أيضًا تخزين مؤقت للإدخال في مشغل المحطة، غير مرتبط تمامًا بتخزين stdio المؤقت. (في الواقع، عادةً ما يكون إدخال المحطة مخزنًا مؤقتًا سطريًا في النواة.) يمكن تعديل معالجة إدخال النواة هذه باستخدام استدعاءات مثل tcsetattr(3)؛ انظر أيضًا stty(1) وtermios(3).

انظر أيضًا
csh(1), sh(1), open(2), fopen(3), stdio(3)

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

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

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