setbuf(3)

الاسم
setbuf, setbuffer, setlinebuf, setvbuf - عمليات التخزين المؤقت للدفق

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

موجز
#include <stdio.h>

int setvbuf(size_t size;
            FILE *restrict stream, char buf[restrict size],
            int mode, size_t size);

void setbuf(FILE *restrict stream, char *restrict buf);
void setbuffer(size_t size;
            FILE *restrict stream, char buf[restrict size],
            size_t size);
void setlinebuf(FILE *stream);

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

setbuffer()، setlinebuf():
    منذ glibc 2.19:
        _DEFAULT_SOURCE
    glibc 2.19 وما قبله:
        _BSD_SOURCE

الوصف
الأنواع الثلاثة للتخزين المؤقت المتاحة هي: غير مخزّن، مخزّن بالكتل، ومخزّن بالسطور. عندما يكون دفق الإخراج غير مخزّن، تظهر المعلومات في الملف الوجهة أو الطرفية فور كتابتها؛ عندما يكون مخزّناً بالكتل، تُحفَظ العديد من المحارف وتُكتب ككتلة واحدة؛ عندما يكون مخزّناً بالسطور، تُحفَظ المحارف حتى يُخرج سطر جديد أو يُقرأ إدخال من أي دفق موصول بجهاز طرفي (عادةً stdin). يمكن استخدام الدالة fflush(3) لإجبار الكتلة على الخروج مبكراً. (انظر fclose(3).)

عادةً، جميع الملفات مخزّنة بالكتل. إذا كان الدفق يشير إلى طرفية (كما يفعل stdout عادةً)، فإنه يُخزّن بالسطور. دفق الخطأ المعياري stderr يكون دائماً غير مخزّن مبدئياً.

يمكن استخدام الدالة setvbuf() على أي دفق مفتوح لتغيير خبيئته. يجب أن يكون المعامل mode واحداً من وحدات الماكرو الثلاث التالية:

    _IONBF
        غير مخزّن

    _IOLBF
        مخزّن بالسطور

    _IOFBF
        مخزّن بالكامل

باستثناء الملفات غير المخزّنة، يجب أن يشير المعامل buf إلى خبيئة بطول size بايت على الأقل؛ ستُستخدم هذه الخبيئة بدلاً من الخبيئة الحالية. إذا كان المعامل buf هو NULL، يتأثر الوضع فقط؛ سيُخصص خبيئة جديدة في عملية القراءة أو الكتابة التالية. يمكن استخدام الدالة setvbuf() فقط بعد فتح الدفق وقبل تنفيذ أي عمليات أخرى عليه.

الاستدعاءات الثلاثة الأخرى هي، في الواقع، مجرد أسماء مستعارة لاستدعاءات setvbuf(). الدالة setbuf() مكافئة تماماً للاستدعاء

setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);

الدالة setbuffer() هي نفسها، باستثناء أن حجم الخبيئة متروك للمستدعي، بدلاً من تحديده بواسطة BUFSIZ المبدئي. الدالة setlinebuf() مكافئة تماماً للاستدعاء:

setvbuf(stream, NULL, _IOLBF, 0);

قيمة الإرجاع
تُرجع الدالة setvbuf() 0 عند النجاح. تُرجع قيمة غير صفرية عند الفشل (mode غير صالح أو لا يمكن تلبية الطلب). قد تُعيِّن errno عند الفشل.

الدوال الأخرى لا ترجع قيمة.

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

المعايير

setbuf()
setvbuf()
    C11, POSIX.1-2008.

التاريخ

setbuf()
setvbuf()
    C89, POSIX.1-2001.

تحذيرات
يذكر POSIX أن قيمة errno غير محددة بعد استدعاء setbuf()، ويذكر أيضًا أنه نظرًا لعدم اشتراط بقاء قيمة errno دون تغيير بعد استدعاء ناجح لـ setbuf()، يجب على التطبيقات استخدام setvbuf() بدلاً من ذلك لاكتشاف الأخطاء.

العلل
يجب التأكد من أن المساحة التي يشير إليها buf لا تزال موجودة عند إغلاق stream، والذي يحدث أيضًا عند إنهاء البرنامج. على سبيل المثال، ما يلي غير صالح:

    #include <stdio.h>

    int
    main(void)
    {
        char buf[BUFSIZ];

        setbuf(stdout, buf);
        printf("Hello, world!\n");
        return 0;
    }

انظر أيضًا
stdbuf(1)، fclose(3)، fflush(3)، fopen(3)، fread(3)، malloc(3)، printf(3)، puts(3)

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

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

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