.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1999, Andries E. Brouwer .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH printf 3 "16 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم printf، fprintf، dprintf، vprintf، vfprintf، vdprintf، \- تحويل المخرجات المنسقة .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBint printf(const char *restrict \fP\fIformat\fP\fB, ...);\fP \fBint fprintf(FILE *restrict \fP\fIstream\fP\fB,\fP \fB const char *restrict \fP\fIformat\fP\fB, ...);\fP \fBint dprintf(int \fP\fIfd\fP\fB,\fP \fB const char *restrict \fP\fIformat\fP\fB, ...);\fP .P \fBint vprintf(const char *restrict \fP\fIformat\fP\fB, va_list \fP\fIap\fP\fB);\fP \fBint vfprintf(FILE *restrict \fP\fIstream\fP\fB,\fP \fB const char *restrict \fP\fIformat\fP\fB, va_list \fP\fIap\fP\fB);\fP \fBint vdprintf(int \fP\fIfd\fP\fB,\fP \fB const char *restrict \fP\fIformat\fP\fB, va_list \fP\fIap\fP\fB);\fP .fi .P .RS -4 متطلبات ماكروات اختبار الميزات لـ glibc (انظر \fBfeature_test_macros\fP(7)): .RE .P \fBdprintf\fP()، \fBvdprintf\fP(): .nf منذ glibc 2.10: _POSIX_C_SOURCE >= 200809L قبل glibc 2.10: _GNU_SOURCE .fi .SH الوصف تنتج الدوال في عائلة \fBprintf\fP() مخرجات وفقًا لـ \fIformat\fP كما هو موضح أدناه. تكتب الدالتان \fBprintf\fP() و \fBvprintf\fP() المخرجات إلى \fIstdout\fP، وهو دفق المخرجات القياسي؛ بينما تكتب \fBfprintf\fP() و \fBvfprintf\fP() المخرجات إلى \fIstream\fP المخرجات المعطى. .P الدالة \fBdprintf\fP() هي نفسها \fBfprintf\fP() باستثناء أنها تخرج إلى واصف ملف، \fIfd\fP، بدلاً من دفق \fBstdio\fP(3). .P الدوال \fBvprintf\fP()، \fBvfprintf\fP()، \fBvdprintf\fP() مكافئة للدوال \fBprintf\fP()، \fBfprintf\fP()، \fBdprintf\fP()، على التوالي، باستثناء أنها تُستدعى باستخدام \fIva_list\fP بدلاً من عدد متغير من المعاملات. لا تستدعي هذه الدوال ماكرو \fIva_end\fP. ولأنها تستدعي ماكرو \fIva_arg\fP، فإن قيمة \fIap\fP تكون غير محددة بعد الاستدعاء. انظر \fBstdarg\fP(3). .P تكتب كل هذه الدوال المخرجات تحت تحكم سلسلة \fIformat\fP تحدد كيفية تحويل المعاملات اللاحقة (أو المعاملات التي تم الوصول إليها عبر مرافق المعاملات متغيرة الطول في \fBstdarg\fP(3)) للمخرجات. .SS "تنسيق سلسلة التنسيق" سلسلة التنسيق هي سلسلة محارف، تبدأ وتنتهي في حالة الإزاحة المبدئية، إن وجدت. تتكون سلسلة التنسيق من صفر أو أكثر من التوجيهات: محارف عادية (ليست \fB%\fP)، والتي تُنسخ دون تغيير إلى دفق المخرجات؛ ومواصفات التحويل، والتي ينتج عن كل منها جلب صفر أو أكثر من المعاملات اللاحقة. تبدأ كل مواصفة تحويل بالمحرف \fB%\fP، وتنتهي بـ \fIconversion specifier\fP. وفيما بينهما قد يوجد (بهذا الترتيب) صفر أو أكثر من \fIflags\fP، و \fIfield width\fP أدنى اختياري، و \fIprecision\fP اختيارية و \fIlength modifier\fP اختياري. .P الصيغة العامة لمواصفة التحويل هي: .P .in +4n .nf %[argument$][flags][width][.precision][length modifier]conversion .fi .in .P يجب أن تتوافق المعاملات بشكل صحيح (بعد ترقية النوع) مع محدد التحويل. مبدئيًا، تُستخدم المعاملات بالترتيب المعطى، حيث يطلب كل \[aq]*\[aq] (انظر \fIعرض الحقل\fP و \fIالدقة\fP أدناه) وكل محدد تحويل المعامل التالي (ويعد خطأً إذا تم إعطاء عدد غير كافٍ من المعاملات). يمكن للمرء أيضًا تحديد المعامل الذي سيؤخذ صراحةً، في كل مكان يتطلب معاملًا، عن طريق كتابة "%m$" بدلاً من \[aq]%\[aq] و "*m$" بدلاً من \[aq]*\[aq]، حيث يشير العدد الصحيح العشري \fIm\fP إلى موضع المعامل المطلوب في قائمة المعاملات، مفهرسًا بدءًا من 1. وبالتالي، .P .in +4n .EX printf("%*d", width, num); .EE .in .P و .P .in +4n .EX printf("%2$*1$d", width, num); .EE .in .P متكافئان. يسمح النمط الثاني بالإشارات المتكررة لنفس المعامل. لا يتضمن معيار C99 النمط الذي يستخدم \[aq]$\[aq]، والذي يأتي من مواصفة UNIX الموحدة (Single UNIX Specification). إذا وُظف النمط الذي يستخدم \[aq]$\[aq]، فيجب استخدامه في جميع التحويلات التي تأخذ معاملًا وجميع معاملات العرض والدقة، ولكن يمكن خلطه مع تنسيقات "%%" التي لا تستهلك معاملًا. يجب ألا تكون هناك فجوات في أرقام المعاملات المحددة باستخدام \[aq]$\[aq]؛ على سبيل المثال، إذا حُدد المعاملان 1 و 3، فيجب أيضًا تحديد المعامل 2 في مكان ما في سلسلة التنسيق. .P بالنسبة لبعض التحويلات الرقمية، يُستخدم محرف أساس ("الفاصلة العشرية") أو محرف تجميع الآلاف. يعتمد المحرف الفعلي المستخدم على جزء \fBLC_NUMERIC\fP من المحلية. (انظر \fBsetlocale\fP(3).) تستخدم المحلية POSIX الرمز \[aq].\[aq] كمحرف أساس، وليس لديها محرف تجميع. وبالتالي، .P .in +4n .EX printf("%\[aq].2f", 1234567.89); .EE .in .P ينتج عنها "1234567.89" في محلية POSIX، و "1234567,89" في محلية nl_NL، و "1.234.567,89" في محلية da_DK. .SS "محارف الأعلام" يتبع المحرف % صفر أو أكثر من الأعلام التالية: .TP \fB#\fP يجب تحويل القيمة إلى "شكل بديل". لتحويلات \fBo\fP، يُجعل المحرف الأول من سلسلة المخرجات صفرًا (عن طريق بادئة 0 إذا لم يكن صفرًا بالفعل). لتحويلات \fBx\fP و \fBX\fP، تسبق النتيجة غير الصفرية السلسلة "0x" (أو "0X" لتحويلات \fBX\fP). لتحويلات \fBa\fP، \fBA\fP، \fBe\fP، \fBE\fP، \fBf\fP، \fBF\fP، \fBg\fP، و \fBG\fP، ستحتوي النتيجة دائمًا على فاصلة عشرية، حتى لو لم تتبعها أرقام (عادةً ما تظهر الفاصلة العشرية في نتائج تلك التحويلات فقط إذا تبعها رقم). لتحويلات \fBg\fP و \fBG\fP، لا تُحذف الأصفار اللاحقة من النتيجة كما هو الحال بخلاف ذلك. بالنسبة لـ \fBm\fP، إذا كان \fIerrno\fP يحتوي على رمز خطأ صالح، تُطبع مخرجات \fIstrerrorname_np(errno)\fP؛ وخلاف ذلك، تُطبع القيمة المخزنة في \fIerrno\fP كعدد عشري. بالنسبة للتحويلات الأخرى، تكون النتيجة غير محددة. .TP \fB\&0\fP يجب حشو القيمة بالأصفار. لتحويلات \fBd\fP، \fBi\fP، \fBo\fP، \fBu\fP، \fBx\fP، \fBX\fP، \fBa\fP، \fBA\fP، \fBe\fP، \fBE\fP، \fBf\fP، \fBF\fP، \fBg\fP، و \fBG\fP، تُحشى القيمة المحولة من اليسار بالأصفار بدلاً من الفراغات. إذا ظهر العلمان \fB\&0\fP و \fB\-\fP معًا، يُتجاهل العلم \fB\&0\fP. إذا أُعطيت دقة مع تحويل عدد صحيح (\fBd\fP، \fBi\fP، \fBo\fP، \fBu\fP، \fBx\fP، و \fBX\fP)، يُتجاهل العلم \fB\&0\fP. بالنسبة للتحويلات الأخرى، السلوك غير محدد. .TP \fB\-\fP يجب محاذاة القيمة المحولة لليسار على حدود الحقل. (المبدئي هو المحاذاة لليمين). تُحشى القيمة المحولة من اليمين بالفراغات، بدلاً من حشوها من اليسار بالفراغات أو الأصفار. يتخطى العلم \fB\-\fP العلم \fB\&0\fP إذا أُعطيا معًا. .TP \fB\[aq] \[aq]\fP (مسافة) يجب ترك فراغ قبل الرقم الموجب (أو السلسلة الفارغة) الناتج عن تحويل ذو إشارة. .TP \fB+\fP يجب دائمًا وضع إشارة (+ أو \-) قبل الرقم الناتج عن تحويل ذو إشارة. مبدئيًا، تُستخدم الإشارة للأرقام السالبة فقط. يتخطى العلم \fB+\fP المسافة إذا استخدما معًا. .P أعلام المحارف الخمسة أعلاه معرفة في معيار C99. وتحدد POSIX علم محرف إضافي. .TP \fB\[aq]\fP للتحويل العشري (\fBi\fP، \fBd\fP، \fBu\fP، \fBf\fP، \fBF\fP، \fBg\fP، \fBG\fP) يجب تجميع المخرجات باستخدام محارف تجميع الآلاف ككمية \fIغير نقدية\fP. وبشكل مضلل، ليس هذا بالضرورة كل ألف: على سبيل المثال، تجمع الكاربي ("mjw_IN") أرقامها إلى 3 مرة واحدة، ثم 2 بشكل متكرر. قارن \fBlocale\fP(7) \fIgrouping\fP و \fIthousands_sep\fP، وعارضها مع \fImon_grouping\fP/\fImon_thousands_sep\fP و \fBstrfmon\fP(3). هذا لا يفعل شيئًا في محلية "C" المبدئية. .P تضيف glibc 2.2 علم محرف إضافي. .TP \fBI\fP .\" outdigits keyword in locale file لتحويل الأعداد الصحيحة العشرية (\fBi\fP، \fBd\fP، \fBu\fP) تستخدم المخرجات أرقام المخرجات البديلة للمحلية، إن وجدت. على سبيل المثال، منذ glibc 2.2.3، سيعطي هذا الأرقام العربية الهندية في المحلية الفارسية ("fa_IR"). .SS "عرض الحقل" سلسلة أرقام عشرية اختيارية (مع رقم أول غير صفري) تحدد الحد الأدنى لعرض الحقل. إذا كانت القيمة المحولة تحتوي على محارف أقل من عرض الحقل، فسيتم حشوها بمسافات من اليسار (أو اليمين، إذا أُعطي علم المحاذاة لليسار). بدلاً من سلسلة أرقام عشرية، يمكن للمرء كتابة "*" أو "*m$" (لبعض الأعداد الصحيحة العشرية \fIm\fP) لتحديد أن عرض الحقل مُعطى في المعامل التالي، أو في المعامل رقم \fIm\fP، على التوالي، والذي يجب أن يكون من النوع \fIint\fP. يُؤخذ عرض الحقل السالب كعلم \[aq]\-\[aq] يتبعه عرض حقل موجب. لا يتسبب عرض الحقل غير الموجود أو الصغير في اقتطاع الحقل في أي حال من الأحوال؛ إذا كانت نتيجة التحويل أوسع من عرض الحقل، يتم توسيع الحقل لاحتواء نتيجة التحويل. .SS الدقة دقة اختيارية، على شكل نقطة (\[aq].\[aq]) تليها سلسلة أرقام عشرية اختيارية. بدلاً من سلسلة أرقام عشرية، يمكن للمرء كتابة "*" أو "*m$" (لبعض الأعداد الصحيحة العشرية \fIm\fP) لتحديد أن الدقة مُعطاة في المعامل التالي، أو في المعامل رقم \fIm\fP، على التوالي، والذي يجب أن يكون من النوع \fIint\fP. إذا أُعطيت الدقة كمجرد \[aq].\[aq]، تُعتبر الدقة صفرًا. تُؤخذ الدقة السالبة كما لو كانت الدقة قد حُذفت. يحدد هذا الحد الأدنى لعدد الأرقام التي ستظهر لتحويلات \fBd\fP، \fBi\fP، \fBo\fP، \fBu\fP، \fBx\fP، و \fBX\fP، وعدد الأرقام التي ستظهر بعد محرف الأساس لتحويلات \fBa\fP، \fBA\fP، \fBe\fP، \fBE\fP، \fBf\fP، و \fBF\fP، والحد الأقصى لعدد الأرقام المعنوية لتحويلات \fBg\fP و \fBG\fP، أو الحد الأقصى لعدد المحارف التي ستُطبع من سلسلة لتحويلات \fBs\fP و \fBS\fP. .SS "معدل الطول" هنا، يرمز "تحويل عدد صحيح" إلى تحويل \fBd\fP، \fBi\fP، \fBo\fP، \fBu\fP، \fBx\fP، أو \fBX\fP. .TP \fBhh\fP يتوافق تحويل عدد صحيح لاحق مع معامل \fIsigned char\fP أو \fIunsigned char\fP، أو يتوافق تحويل \fBn\fP لاحق مع مؤشر إلى معامل \fIsigned char\fP. .TP \fBh\fP يتوافق تحويل عدد صحيح لاحق مع معامل \fIshort\fP أو \fIunsigned short\fP، أو يتوافق تحويل \fBn\fP لاحق مع مؤشر إلى معامل \fIshort\fP. .TP \fBl\fP (ell) يتوافق تحويل عدد صحيح لاحق مع معامل \fIlong\fP أو \fIunsigned long\fP، أو يتوافق تحويل \fBn\fP لاحق مع مؤشر إلى معامل \fIlong\fP، أو يتوافق تحويل \fBc\fP لاحق مع معامل \fIwint_t\fP، أو يتوافق تحويل \fBs\fP لاحق مع مؤشر إلى معامل \fIwchar_t\fP. في تحويل \fBa\fP، \fBA\fP، \fBe\fP، \fBE\fP، \fBf\fP، \fBF\fP، \fBg\fP، أو \fBG\fP لاحق، يُتجاهل معدل الطول هذا (C99؛ ليس في SUSv2). .TP \fBll\fP (ell\-ell). يتوافق تحويل عدد صحيح لاحق مع معامل \fIlong long\fP أو \fIunsigned long long\fP، أو يتوافق تحويل \fBn\fP لاحق مع مؤشر إلى معامل \fIlong long\fP. .TP \fBq\fP مرادف لـ \fBll\fP. هذا امتداد غير معيار، مشتق من BSD؛ تجنب استخدامه في الكود الجديد. .TP \fBL\fP يتوافق تحويل \fBa\fP، \fBA\fP، \fBe\fP، \fBE\fP، \fBf\fP، \fBF\fP، \fBg\fP، أو \fBG\fP لاحق مع معامل \fIlong double\fP. (يسمح C99 بـ %LF، لكن SUSv2 لا يسمح بذلك). .TP \fBj\fP يتوافق تحويل عدد صحيح لاحق مع معامل \fIintmax_t\fP أو \fIuintmax_t\fP، أو يتوافق تحويل \fBn\fP لاحق مع مؤشر إلى معامل \fIintmax_t\fP. .TP \fBw\fP\fIN\fP تحويل عدد صحيح لاحق يقابل عدداً صحيحاً بعرض \fIN\fP بت (C23). .TP \fBz\fP يتوافق تحويل عدد صحيح لاحق مع معامل \fIsize_t\fP أو \fIssize_t\fP، أو يتوافق تحويل \fBn\fP لاحق مع مؤشر إلى معامل \fIsize_t\fP. .TP \fBZ\fP مرادف غير معيار لـ \fBz\fP يسبق ظهور \fBz\fP. لا تستخدمه في الكود الجديد. .TP \fBt\fP يتوافق تحويل عدد صحيح لاحق مع معامل \fIptrdiff_t\fP، أو يتوافق تحويل \fBn\fP لاحق مع مؤشر إلى معامل \fIptrdiff_t\fP. .P تحدد SUSv3 كل ما سبق، باستثناء تلك المعدلات المذكورة صراحةً كإضافات غير معيارية. حددت SUSv2 فقط معدلات الطول \fBh\fP (في \fBhd\fP، \fBhi\fP، \fBho\fP، \fBhx\fP، \fBhX\fP، \fBhn\fP) و \fBl\fP (في \fBld\fP، \fBli\fP، \fBlo\fP، \fBlx\fP، \fBlX\fP، \fBln\fP، \fBlc\fP، \fBls\fP) و \fBL\fP (في \fBLe\fP، \fBLE\fP، \fBLf\fP، \fBLg\fP، \fBLG\fP). .P .\" كامتداد غير معيار، تعامل تطبيقات GNU كلاً من \fBll\fP و \fBL\fP كمرادفات، بحيث يمكن للمرء، على سبيل المثال، كتابة \fBllg\fP (كمرادف لـ \fBLg\fP المتوافق مع المعايير) و \fBLd\fP (كمرادف لـ \fBlld\fP المتوافق مع المعايير). هذا الاستخدام غير محمول. .SS "محددات التحويل" محرف يحدد نوع التحويل المراد تطبيقه. محددات التحويل ومعانيها هي: .TP \fBd\fP، \fBi\fP يُحول معامل \fIint\fP إلى تدوين عشري ذو إشارة. تعطي الدقة، إن وجدت، الحد الأدنى لعدد الأرقام التي يجب أن تظهر؛ إذا كانت القيمة المحولة تتطلب أرقامًا أقل، تُحشى من اليسار بالأصفار. الدقة المبدئية هي 1. عندما يُطبع 0 بدقة صريحة 0، تكون المخرجات فارغة. .TP \fBo\fP، \fBu\fP، \fBx\fP، \fBX\fP يُحول معامل \fIunsigned int\fP إلى تدوين ثماني بدون إشارة (\fBo\fP)، أو عشري بدون إشارة (\fBu\fP)، أو سداسي عشري بدون إشارة (\fBx\fP و \fBX\fP). تُستخدم الأحرف \fBabcdef\fP لتحويلات \fBx\fP؛ بينما تُستخدم الأحرف \fBABCDEF\fP لتحويلات \fBX\fP. تعطي الدقة، إن وجدت، الحد الأدنى لعدد الأرقام التي يجب أن تظهر؛ إذا كانت القيمة المحولة تتطلب أرقامًا أقل، تُحشى من اليسار بالأصفار. الدقة المبدئية هي 1. عندما يُطبع 0 بدقة صريحة 0، تكون المخرجات فارغة. .TP \fBe\fP، \fBE\fP يُقرب معامل \fIdouble\fP ويُحول بالأسلوب [\-]d\fB\&.\fPddd\fBe\fP\(+-dd حيث يوجد رقم واحد (وهو غير صفري إذا كان المعامل غير صفري) قبل محرف الفاصلة العشرية، وعدد الأرقام بعدها يساوي الدقة؛ إذا كانت الدقة مفقودة، تُعتبر 6؛ إذا كانت الدقة صفرًا، فلا يظهر محرف فاصلة عشرية. يستخدم تحويل \fBE\fP الحرف \fBE\fP (بدلاً من \fBe\fP) لتقديم الأس. يحتوي الأس دائمًا على رقمين على الأقل؛ إذا كانت القيمة صفرًا، فإن الأس هو 00. .TP \fBf\fP، \fBF\fP يُقرب معامل \fIdouble\fP ويُحول إلى تدوين عشري بالأسلوب [\-]ddd\fB\&.\fPddd، حيث يكون عدد الأرقام بعد محرف الفاصلة العشرية مساويًا لمواصفة الدقة. إذا كانت الدقة مفقودة، تُعتبر 6؛ إذا كانت الدقة صفرًا صراحةً، فلا يظهر محرف فاصلة عشرية. إذا ظهرت فاصلة عشرية، فيظهر رقم واحد على الأقل قبلها. .IP (لا تعرف SUSv2 عن \fBF\fP وتقول إنه يمكن توفير تمثيلات سلاسل محارف للانهاية و NaN. تضيف SUSv3 مواصفة لـ \fBF\fP. يحدد معيار C99 "[\-]inf" أو "[\-]infinity" للانهاية، وسلسلة تبدأ بـ "nan" لـ NaN، في حالة تحويل \fBf\fP، و "[\-]INF" أو "[\-]INFINITY" أو "NAN" في حالة تحويل \fBF\fP). .TP \fBg\fP، \fBG\fP يُحول معامل \fIdouble\fP بالأسلوب \fBf\fP أو \fBe\fP (أو \fBF\fP أو \fBE\fP لتحويلات \fBG\fP). تحدد الدقة عدد الأرقام المعنوية. إذا كانت الدقة مفقودة، يتم إعطاء 6 أرقام؛ إذا كانت الدقة صفرًا، تُعامل كـ 1. يُستخدم الأسلوب \fBe\fP إذا كان الأس من تحويله أقل من \-4 أو أكبر من أو يساوي الدقة. تُحذف الأصفار اللاحقة من الجزء الكسري من النتيجة؛ وتظهر الفاصلة العشرية فقط إذا تبعها رقم واحد على الأقل. .TP \fBa\fP، \fBA\fP (C99؛ ليس في SUSv2، ولكن أُضيف في SUSv3) لتحويل \fBa\fP، يُحوّل معطى \fIdouble\fP إلى تدوين ست عشري (باستخدام الأحرف abcdef) بالنمط [\-]\fB0x\fPh\fB\&.\fPhhhh\fBp\fP\(+-d؛ أما لتحويل \fBA\fP فيُستخدم البادئة \fB0X\fP والأحرف ABCDEF وفاصل الأس \fBP\fP. يوجد رقم ست عشري واحد قبل الفاصلة الشعاعية، وعدد الأرقام بعدها يساوي الدقة. تكفي الدقة المبدئية لتمثيل دقيق للقيمة إذا كان هناك تمثيل دقيق في الأساس 2، وإلا فإنها تكون كبيرة بما يكفي لتمييز القيم من النوع \fIdouble\fP. الرقم قبل الفاصلة الشعاعية غير محدد للأرقام غير المعييرة، وغير صفري ولكنه غير محدد للأرقام المعييرة. الأس، \fId\fP، هو أس الأساس 2 المناسب معبراً عنه كعدد عشري صحيح؛ ويحتوي دائماً على رقم واحد على الأقل؛ وإذا كانت القيمة صفراً، فإن الأس يكون 0. .TP \fBc\fP إذا لم يكن هناك معدل \fBl\fP، يُحول معامل \fIint\fP إلى \fIunsigned char\fP، ويُكتب المحرف الناتج. إذا وُجد معدل \fBl\fP، يُحول معامل \fIwint_t\fP (محرف واسع) إلى تسلسل متعدد البايتات عن طريق استدعاء الدالة \fBwcrtomb\fP(3)، مع حالة تحويل تبدأ في الحالة المبدئية، وتُكتب السلسلة متعددة البايتات الناتجة. .TP \fBs\fP في حال عدم وجود معدّل \fBl\fP: يُتوقع أن يكون معطى \fIconst char\ *\fP مؤشراً إلى مصفوفة من نوع محارف (مؤشر إلى سلسلة نصية). تُكتب المحارف من المصفوفة وصولاً إلى (دون تضمين) بايت الخلو المنتهي (\[aq]\[rs]0\[aq])؛ وإذا حُددت الدقة، فلا يُكتب أكثر من العدد المحدد. إذا أُعطيت الدقة، فلا يشترط وجود بايت الخلو؛ أما إذا لم تُحدد الدقة، أو كانت أكبر من حجم المصفوفة، فيجب أن تحتوي المصفوفة على بايت خلو منتهٍ. .IP في حال وجود معدّل \fBl\fP: يُتوقع أن يكون معطى \fIconst wchar_t\ *\fP مؤشراً إلى مصفوفة من المحارف العريضة. تُحوّل المحارف العريضة من المصفوفة إلى محارف متعددة البايتات (كل منها عبر استدعاء للدالة \fBwcrtomb\fP(3)، مع حالة تحويل تبدأ من الحالة الأولية قبل أول محرف عريض)، وصولاً إلى محرف الخلو العريض المنتهي وتضمينه. تُكتب المحارف متعددة البايتات الناتجة وصولاً إلى (دون تضمين) بايت الخلو المنتهي. إذا حُددت الدقة، فلا يُكتب أكثر من عدد البايتات المحدد، ولكن لا تُكتب محارف متعددة بايتات جزئية. لاحظ أن الدقة تحدد عدد \fIالبايتات\fP المكتوبة، وليس عدد \fIالمحارف العريضة\fP أو \fIمواقع الشاشة\fP. يجب أن تحتوي المصفوفة على محرف خلو عريض منتهٍ، ما لم تُعطَ دقة صغيرة جداً بحيث يتجاوزها عدد البايتات المكتوبة قبل الوصول إلى نهاية المصفوفة. .TP \fBC\fP (ليس في C99 أو C11، ولكنه في SUSv2 وSUSv3 وSUSv4.) مرادف لـ \fBlc\fP. لا تستخدمه. .TP \fBS\fP (ليس في C99 أو C11، ولكنه في SUSv2 وSUSv3 وSUSv4.) مرادف لـ \fBls\fP. لا تستخدمه. .TP \fBp\fP يُطبع معطى المؤشر \fIvoid\ *\fP بالتمثيل الست عشري (كما لو كان عبر \fB%#x\fP أو \fB%#lx\fP). .TP \fBn\fP يُخزن عدد المحارف المكتوبة حتى الآن في العدد الصحيح الذي يشير إليه المعطى المقابل. يجب أن يكون هذا المعطى من نوع \fIint\ *\fP، أو ناعاً يطابق حجمه معدّل طول العدد الصحيح المرفق (اختيارياً). لا يُحوّل أي معطى. (هذا المحدد غير مدعوم في مكتبة bionic C.) السلوك غير محدد إذا تضمن تخصيص التحويل أي أعلام أو عرض حقل أو دقة. .TP \fBm\fP (امتداد glibc؛ مدعوم بواسطة uClibc وmusl، وعلى أندرويد من مستوى API 29.) يطبع مخرجات \fIstrerror(errno)\fP (أو \fIstrerrorname_np(errno)\fP في الشكل البديل). لا يتطلب أي معطى. .TP \fB%\fP تُكتب العلامة \[aq]%\[aq]. لا يُحوّل أي معطى. تخصيص التحويل الكامل هو \[aq]%%\[aq]. .SH "قيمة الإرجاع" عند العودة بنجاح، تعيد هذه الدوال عدد البايتات المطبوعة (باستثناء بايت الخلو المستخدم لإنهاء المخرجات إلى السلاسل النصية). .P عند حدوث خطأ، تُعاد قيمة سالبة، ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء انظر \fBwrite\fP(2) و \fBputwc\fP(3). بالإضافة إلى ذلك، قد يحدث الخطأ التالي: .TP \fBEOVERFLOW\fP القيمة المطلوب إرجاعها أكبر من \fBINT_MAX\fP. .P قد تفشل الدالة \fBdprintf\fP() بالإضافة إلى ذلك إذا: .TP \fBEBADF\fP كان معطى \fIfd\fP واصف ملف غير صالح. .SH السمات للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. الواجهة السمة القيمة T{ .na .nh \fBprintf\fP(), \fBfprintf\fP(), \fBvprintf\fP(), \fBvfprintf\fP() T} سلامة الخيوط المنطقة (locale) آمنة لتعدد المسالك (MT\-Safe) .TE .SH المعايير .TP \fBfprintf\fP() .TQ \fBprintf\fP() .TQ \fBvprintf\fP() .TQ \fBvfprintf\fP() C11, POSIX.1\-2008. .TP \fBdprintf\fP() .TQ \fBvdprintf\fP() جنو، POSIX.1\-2008. .SH التاريخ .TP \fBfprintf\fP() .TQ \fBprintf\fP() .TQ \fBvprintf\fP() .TQ \fBvfprintf\fP() C89, POSIX.1\-2001. .TP \fBdprintf\fP() .TQ \fBvdprintf\fP() جنو، POSIX.1\-2008. .P الإصدار 4 من دليل X/Open للنقلية (SUSv1، 1994) أضاف \fB\[aq]\fP. .P .\" Linux libc4 knows about the five C standard flags. .\" It knows about the length modifiers \f[B]h\f[], \f[B]l\f[], \f[B]L\f[], .\" and the conversions .\" \f[B]c\f[], \f[B]d\f[], \f[B]e\f[], \f[B]E\f[], \f[B]f\f[], \f[B]F\f[], .\" \f[B]g\f[], \f[B]G\f[], \f[B]i\f[], \f[B]n\f[], \f[B]o\f[], \f[B]p\f[], .\" \f[B]s\f[], \f[B]u\f[], \f[B]x\f[], and \f[B]X\f[], .\" where \f[B]F\f[] is a synonym for \f[B]f\f[]. .\" Additionally, it accepts \f[B]D\f[], \f[B]O\f[], and \f[B]U\f[] as synonyms .\" for \f[B]ld\f[], \f[B]lo\f[], and \f[B]lu\f[]. .\" (This is bad, and caused serious bugs later, when .\" support for \f[B]%D\f[] disappeared.) .\" No locale-dependent radix character, .\" no thousands' separator, no NaN or infinity, no "%m$" and "*m$". .\" .P .\" Linux libc5 knows about the five C standard flags and the \[aq] flag, .\" locale, "%m$" and "*m$". .\" It knows about the length modifiers \f[B]h\f[], \f[B]l\f[], \f[B]L\f[], .\" \f[B]Z\f[], and \f[B]q\f[], but accepts \f[B]L\f[] and \f[B]q\f[] .\" both for \f[I]long double\f[] and for \f[I]long long\f[] (this is a bug). .\" It no longer recognizes \f[B]F\f[], \f[B]D\f[], \f[B]O\f[], and \f[B]U\f[], .\" but adds the conversion character .\" .BR m , .\" which outputs .\" .IR strerror(errno) . .\" .P .\" glibc 2.0 adds conversion characters \f[B]C\f[] and \f[B]S\f[]. .\" .P أضاف glibc 2.1 معدلات الطول \fBhh\fP و\fBj\fP و\fBt\fP و\fBz\fP وأحرف التحويل \fBa\fP و\fBA\fP. .P أضاف glibc 2.2 حرف التحويل \fBF\fP بدلالات C99، وحرف العلم \fBI\fP. .P .\" .SH HISTORY .\" UNIX V7 defines the three routines .\" .BR printf (), .\" .BR fprintf (), .\" .BR sprintf (), .\" and has the flag \-, the width or precision *, the length modifier l, .\" and the conversions doxfegcsu, and also D,O,U,X as synonyms for ld,lo,lu,lx. .\" This is still true for 2.9.1BSD, but 2.10BSD has the flags .\" #, + and and no longer mentions D,O,U,X. .\" 2.11BSD has .\" .BR vprintf (), .\" .BR vfprintf (), .\" .BR vsprintf (), .\" and warns not to use D,O,U,X. .\" 4.3BSD Reno has the flag 0, the length modifiers h and L, .\" and the conversions n, p, E, G, X (with current meaning) .\" and deprecates D,O,U. .\" 4.4BSD introduces the functions .\" .BR snprintf () .\" and .\" .BR vsnprintf (), .\" and the length modifier q. .\" FreeBSD also has functions .\" .BR asprintf () .\" and .\" .BR vasprintf (), .\" that allocate a buffer large enough for .\" .BR sprintf (). .\" In glibc there are functions .\" .BR dprintf () .\" and .\" .BR vdprintf () .\" that print to a file descriptor instead of a stream. أعطى glibc 2.35 معنى للشكل البديل (\fB#\fP) لمحدد التحويل \fBm\fP، وهو \fI%#m\fP. .SH العلل .\" .P .\" Some floating-point conversions under early libc4 .\" caused memory leaks. غالبًا ما يشير كود مثل \fBprintf(\fP\fIfoo\fP\fB);\fP إلى علة، بما أن \fIfoo\fP قد تحتوي على المحرف %. إذا كانت \fIfoo\fP تأتي من مدخلات مستخدم غير موثوقة، فقد تحتوي على \fB%n\fP، مما يسبب كتابة استدعاء \fBprintf\fP() في الذاكرة وإنشاء ثغرة أمنية. .SH أمثلة لطباعة \fIPi\fP حتى خمس مراتب عشرية: .P .in +4n .EX #include #include fprintf(stdout, "pi = %.5f\[rs]n", 4 * atan(1.0)); .EE .in .P لطباعة التاريخ والوقت بصيغة "الأحد، 3 يوليو، 10:02"، حيث \fIweekday\fP و \fImonth\fP مؤشرات إلى سلاسل: .P .in +4n .EX #include fprintf(stdout, "%s, %s %d, %.2d:%.2d\[rs]n", weekday, month, day, hour, min); .EE .in .P تستخدم العديد من البلدان ترتيب يوم\-شهر\-سنة. ومن ثم، يجب أن تكون النسخة المدوّلة قادرة على طباعة المعطيات بترتيب يحدده التنسيق: .P .in +4n .EX #include fprintf(stdout, format, weekday, month, day, hour, min); .EE .in .P حيث يعتمد \fIformat\fP على المحلية، وقد يبدل المعاملات. مع القيمة: .P .in +4n .EX "%1$s, %3$d.\& %2$s, %4$d:%5$.2d\[rs]n" .EE .in .P قد يحصل المرء على "Sonntag, 3.\& Juli, 10:02". .SH "انظر أيضًا" \fBprintf\fP(1)، \fBasprintf\fP(3)، \fBputs\fP(3)، \fBscanf\fP(3)، \fBsetlocale\fP(3)، \fBsnprintf\fP(3)، \fBstrfromd\fP(3)، \fBwcrtomb\fP(3)، \fBwprintf\fP(3)، \fBlocale\fP(5) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .