printf(3)

الاسم
printf، fprintf، dprintf، vprintf، vfprintf، vdprintf، - تحويل المخرجات المنسقة

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

موجز
#include <stdio.h>

int printf(const char *restrict format, ...);
int fprintf(FILE *restrict stream,
            const char *restrict format, ...);
int dprintf(int fd,
            const char *restrict format, ...);

int vprintf(const char *restrict format, va_list ap);
int vfprintf(FILE *restrict stream,
            const char *restrict format, va_list ap);
int vdprintf(int fd,
            const char *restrict format, va_list ap);

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

dprintf()، vdprintf():
    منذ glibc 2.10:
        _POSIX_C_SOURCE >= 200809L
    قبل glibc 2.10:
        _GNU_SOURCE

الوصف
تنتج الدوال في عائلة printf() مخرجات وفقًا لـ format كما هو موضح أدناه. تكتب الدالتان printf() و vprintf() المخرجات إلى stdout، وهو دفق المخرجات القياسي؛ بينما تكتب fprintf() و vfprintf() المخرجات إلى stream المخرجات المعطى.

الدالة dprintf() هي نفسها fprintf() باستثناء أنها تخرج إلى واصف ملف، fd، بدلاً من دفق stdio(3).

الدوال vprintf()، vfprintf()، vdprintf() مكافئة للدوال printf()، fprintf()، dprintf()، على التوالي، باستثناء أنها تُستدعى باستخدام va_list بدلاً من عدد متغير من المعاملات. لا تستدعي هذه الدوال ماكرو va_end. ولأنها تستدعي ماكرو va_arg، فإن قيمة ap تكون غير محددة بعد الاستدعاء. انظر stdarg(3).

تكتب كل هذه الدوال المخرجات تحت تحكم سلسلة format تحدد كيفية تحويل المعاملات اللاحقة (أو المعاملات التي تم الوصول إليها عبر مرافق المعاملات متغيرة الطول في stdarg(3)) للمخرجات.

  تنسيق سلسلة التنسيق
سلسلة التنسيق هي سلسلة محارف، تبدأ وتنتهي في حالة الإزاحة المبدئية، إن وجدت. تتكون سلسلة التنسيق من صفر أو أكثر من التوجيهات: محارف عادية (ليست %)، والتي تُنسخ دون تغيير إلى دفق المخرجات؛ ومواصفات التحويل، والتي ينتج عن كل منها جلب صفر أو أكثر من المعاملات اللاحقة. تبدأ كل مواصفة تحويل بالمحرف %، وتنتهي بـ conversion specifier. وفيما بينهما قد يوجد (بهذا الترتيب) صفر أو أكثر من flags، و field width أدنى اختياري، و precision اختيارية و length modifier اختياري.

الصيغة العامة لمواصفة التحويل هي:

%[argument$][flags][width][.precision][length modifier]conversion

يجب أن تتوافق المعاملات بشكل صحيح (بعد ترقية النوع) مع محدد التحويل. مبدئيًا، تُستخدم المعاملات بالترتيب المعطى، حيث يطلب كل '*' (انظر عرض الحقل و الدقة أدناه) وكل محدد تحويل المعامل التالي (ويعد خطأً إذا تم إعطاء عدد غير كافٍ من المعاملات). يمكن للمرء أيضًا تحديد المعامل الذي سيؤخذ صراحةً، في كل مكان يتطلب معاملًا، عن طريق كتابة "%m$" بدلاً من '%' و "*m$" بدلاً من '*'، حيث يشير العدد الصحيح العشري m إلى موضع المعامل المطلوب في قائمة المعاملات، مفهرسًا بدءًا من 1. وبالتالي،

    printf("%*d", width, num);

و

    printf("%2$*1$d", width, num);

متكافئان. يسمح النمط الثاني بالإشارات المتكررة لنفس المعامل. لا يتضمن معيار C99 النمط الذي يستخدم '$'، والذي يأتي من مواصفة UNIX الموحدة (Single UNIX Specification). إذا وُظف النمط الذي يستخدم '$'، فيجب استخدامه في جميع التحويلات التي تأخذ معاملًا وجميع معاملات العرض والدقة، ولكن يمكن خلطه مع تنسيقات "%%" التي لا تستهلك معاملًا. يجب ألا تكون هناك فجوات في أرقام المعاملات المحددة باستخدام '$'؛ على سبيل المثال، إذا حُدد المعاملان 1 و 3، فيجب أيضًا تحديد المعامل 2 في مكان ما في سلسلة التنسيق.

بالنسبة لبعض التحويلات الرقمية، يُستخدم محرف أساس ("الفاصلة العشرية") أو محرف تجميع الآلاف. يعتمد المحرف الفعلي المستخدم على جزء LC_NUMERIC من المحلية. (انظر setlocale(3).) تستخدم المحلية POSIX الرمز '.' كمحرف أساس، وليس لديها محرف تجميع. وبالتالي،

    printf("%'.2f", 1234567.89);

ينتج عنها "1234567.89" في محلية POSIX، و "1234567,89" في محلية nl_NL، و "1.234.567,89" في محلية da_DK.

  محارف الأعلام
يتبع المحرف % صفر أو أكثر من الأعلام التالية:

#   يجب تحويل القيمة إلى "شكل بديل". لتحويلات o، يُجعل المحرف الأول من سلسلة المخرجات صفرًا (عن طريق بادئة 0 إذا لم يكن صفرًا بالفعل). لتحويلات x و X، تسبق النتيجة غير الصفرية السلسلة "0x" (أو "0X" لتحويلات X). لتحويلات a، A، e، E، f، F، g، و G، ستحتوي النتيجة دائمًا على فاصلة عشرية، حتى لو لم تتبعها أرقام (عادةً ما تظهر الفاصلة العشرية في نتائج تلك التحويلات فقط إذا تبعها رقم). لتحويلات g و G، لا تُحذف الأصفار اللاحقة من النتيجة كما هو الحال بخلاف ذلك. بالنسبة لـ m، إذا كان errno يحتوي على رمز خطأ صالح، تُطبع مخرجات strerrorname_np(errno)؛ وخلاف ذلك، تُطبع القيمة المخزنة في errno كعدد عشري. بالنسبة للتحويلات الأخرى، تكون النتيجة غير محددة.

0   يجب حشو القيمة بالأصفار. لتحويلات d، i، o، u، x، X، a، A، e، E، f، F، g، و G، تُحشى القيمة المحولة من اليسار بالأصفار بدلاً من الفراغات. إذا ظهر العلمان 0 و - معًا، يُتجاهل العلم 0. إذا أُعطيت دقة مع تحويل عدد صحيح (d، i، o، u، x، و X)، يُتجاهل العلم 0. بالنسبة للتحويلات الأخرى، السلوك غير محدد.

-   يجب محاذاة القيمة المحولة لليسار على حدود الحقل. (المبدئي هو المحاذاة لليمين). تُحشى القيمة المحولة من اليمين بالفراغات، بدلاً من حشوها من اليسار بالفراغات أو الأصفار. يتخطى العلم - العلم 0 إذا أُعطيا معًا.

' ' (مسافة) يجب ترك فراغ قبل الرقم الموجب (أو السلسلة الفارغة) الناتج عن تحويل ذو إشارة.

+   يجب دائمًا وضع إشارة (+ أو -) قبل الرقم الناتج عن تحويل ذو إشارة. مبدئيًا، تُستخدم الإشارة للأرقام السالبة فقط. يتخطى العلم + المسافة إذا استخدما معًا.

أعلام المحارف الخمسة أعلاه معرفة في معيار C99. وتحدد POSIX علم محرف إضافي.

'   للتحويل العشري (i، d، u، f، F، g، G) يجب تجميع المخرجات باستخدام محارف تجميع الآلاف ككمية غير نقدية. وبشكل مضلل، ليس هذا بالضرورة كل ألف: على سبيل المثال، تجمع الكاربي ("mjw_IN") أرقامها إلى 3 مرة واحدة، ثم 2 بشكل متكرر. قارن locale(7) grouping و thousands_sep، وعارضها مع mon_grouping/mon_thousands_sep و strfmon(3). هذا لا يفعل شيئًا في محلية "C" المبدئية.

تضيف glibc 2.2 علم محرف إضافي.

I   لتحويل الأعداد الصحيحة العشرية (i، d، u) تستخدم المخرجات أرقام المخرجات البديلة للمحلية، إن وجدت. على سبيل المثال، منذ glibc 2.2.3، سيعطي هذا الأرقام العربية الهندية في المحلية الفارسية ("fa_IR").

  عرض الحقل
سلسلة أرقام عشرية اختيارية (مع رقم أول غير صفري) تحدد الحد الأدنى لعرض الحقل. إذا كانت القيمة المحولة تحتوي على محارف أقل من عرض الحقل، فسيتم حشوها بمسافات من اليسار (أو اليمين، إذا أُعطي علم المحاذاة لليسار). بدلاً من سلسلة أرقام عشرية، يمكن للمرء كتابة "*" أو "*m$" (لبعض الأعداد الصحيحة العشرية m) لتحديد أن عرض الحقل مُعطى في المعامل التالي، أو في المعامل رقم m، على التوالي، والذي يجب أن يكون من النوع int. يُؤخذ عرض الحقل السالب كعلم '-' يتبعه عرض حقل موجب. لا يتسبب عرض الحقل غير الموجود أو الصغير في اقتطاع الحقل في أي حال من الأحوال؛ إذا كانت نتيجة التحويل أوسع من عرض الحقل، يتم توسيع الحقل لاحتواء نتيجة التحويل.

  الدقة
دقة اختيارية، على شكل نقطة ('.') تليها سلسلة أرقام عشرية اختيارية. بدلاً من سلسلة أرقام عشرية، يمكن للمرء كتابة "*" أو "*m$" (لبعض الأعداد الصحيحة العشرية m) لتحديد أن الدقة مُعطاة في المعامل التالي، أو في المعامل رقم m، على التوالي، والذي يجب أن يكون من النوع int. إذا أُعطيت الدقة كمجرد '.'، تُعتبر الدقة صفرًا. تُؤخذ الدقة السالبة كما لو كانت الدقة قد حُذفت. يحدد هذا الحد الأدنى لعدد الأرقام التي ستظهر لتحويلات d، i، o، u، x، و X، وعدد الأرقام التي ستظهر بعد محرف الأساس لتحويلات a، A، e، E، f، و F، والحد الأقصى لعدد الأرقام المعنوية لتحويلات g و G، أو الحد الأقصى لعدد المحارف التي ستُطبع من سلسلة لتحويلات s و S.

  معدل الطول
هنا، يرمز "تحويل عدد صحيح" إلى تحويل d، i، o، u، x، أو X.

hh  يتوافق تحويل عدد صحيح لاحق مع معامل signed char أو unsigned char، أو يتوافق تحويل n لاحق مع مؤشر إلى معامل signed char.

h   يتوافق تحويل عدد صحيح لاحق مع معامل short أو unsigned short، أو يتوافق تحويل n لاحق مع مؤشر إلى معامل short.

l   (ell) يتوافق تحويل عدد صحيح لاحق مع معامل long أو unsigned long، أو يتوافق تحويل n لاحق مع مؤشر إلى معامل long، أو يتوافق تحويل c لاحق مع معامل wint_t، أو يتوافق تحويل s لاحق مع مؤشر إلى معامل wchar_t. في تحويل a، A، e، E، f، F، g، أو G لاحق، يُتجاهل معدل الطول هذا (C99؛ ليس في SUSv2).

ll  (ell-ell). يتوافق تحويل عدد صحيح لاحق مع معامل long long أو unsigned long long، أو يتوافق تحويل n لاحق مع مؤشر إلى معامل long long.

q   مرادف لـ ll. هذا امتداد غير معيار، مشتق من BSD؛ تجنب استخدامه في الكود الجديد.

L   يتوافق تحويل a، A، e، E، f، F، g، أو G لاحق مع معامل long double. (يسمح C99 بـ %LF، لكن SUSv2 لا يسمح بذلك).

j   يتوافق تحويل عدد صحيح لاحق مع معامل intmax_t أو uintmax_t، أو يتوافق تحويل n لاحق مع مؤشر إلى معامل intmax_t.

wN  تحويل عدد صحيح لاحق يقابل عدداً صحيحاً بعرض N بت (C23).

z   يتوافق تحويل عدد صحيح لاحق مع معامل size_t أو ssize_t، أو يتوافق تحويل n لاحق مع مؤشر إلى معامل size_t.

Z   مرادف غير معيار لـ z يسبق ظهور z. لا تستخدمه في الكود الجديد.

t   يتوافق تحويل عدد صحيح لاحق مع معامل ptrdiff_t، أو يتوافق تحويل n لاحق مع مؤشر إلى معامل ptrdiff_t.

تحدد SUSv3 كل ما سبق، باستثناء تلك المعدلات المذكورة صراحةً كإضافات غير معيارية. حددت SUSv2 فقط معدلات الطول h (في hd، hi، ho، hx، hX، hn) و l (في ld، li، lo، lx، lX، ln، lc، ls) و L (في Le، LE، Lf، Lg، LG).

كامتداد غير معيار، تعامل تطبيقات GNU كلاً من ll و L كمرادفات، بحيث يمكن للمرء، على سبيل المثال، كتابة llg (كمرادف لـ Lg المتوافق مع المعايير) و Ld (كمرادف لـ lld المتوافق مع المعايير). هذا الاستخدام غير محمول.

  محددات التحويل
محرف يحدد نوع التحويل المراد تطبيقه. محددات التحويل ومعانيها هي:

d، i
    يُحول معامل int إلى تدوين عشري ذو إشارة. تعطي الدقة، إن وجدت، الحد الأدنى لعدد الأرقام التي يجب أن تظهر؛ إذا كانت القيمة المحولة تتطلب أرقامًا أقل، تُحشى من اليسار بالأصفار. الدقة المبدئية هي 1. عندما يُطبع 0 بدقة صريحة 0، تكون المخرجات فارغة.

o، u، x، X
    يُحول معامل unsigned int إلى تدوين ثماني بدون إشارة (o)، أو عشري بدون إشارة (u)، أو سداسي عشري بدون إشارة (x و X). تُستخدم الأحرف abcdef لتحويلات x؛ بينما تُستخدم الأحرف ABCDEF لتحويلات X. تعطي الدقة، إن وجدت، الحد الأدنى لعدد الأرقام التي يجب أن تظهر؛ إذا كانت القيمة المحولة تتطلب أرقامًا أقل، تُحشى من اليسار بالأصفار. الدقة المبدئية هي 1. عندما يُطبع 0 بدقة صريحة 0، تكون المخرجات فارغة.

e، E
    يُقرب معامل double ويُحول بالأسلوب [-]d.ddde±dd حيث يوجد رقم واحد (وهو غير صفري إذا كان المعامل غير صفري) قبل محرف الفاصلة العشرية، وعدد الأرقام بعدها يساوي الدقة؛ إذا كانت الدقة مفقودة، تُعتبر 6؛ إذا كانت الدقة صفرًا، فلا يظهر محرف فاصلة عشرية. يستخدم تحويل E الحرف E (بدلاً من e) لتقديم الأس. يحتوي الأس دائمًا على رقمين على الأقل؛ إذا كانت القيمة صفرًا، فإن الأس هو 00.

f، F
    يُقرب معامل double ويُحول إلى تدوين عشري بالأسلوب [-]ddd.ddd، حيث يكون عدد الأرقام بعد محرف الفاصلة العشرية مساويًا لمواصفة الدقة. إذا كانت الدقة مفقودة، تُعتبر 6؛ إذا كانت الدقة صفرًا صراحةً، فلا يظهر محرف فاصلة عشرية. إذا ظهرت فاصلة عشرية، فيظهر رقم واحد على الأقل قبلها.

    (لا تعرف SUSv2 عن F وتقول إنه يمكن توفير تمثيلات سلاسل محارف للانهاية و NaN. تضيف SUSv3 مواصفة لـ F. يحدد معيار C99 "[-]inf" أو "[-]infinity" للانهاية، وسلسلة تبدأ بـ "nan" لـ NaN، في حالة تحويل f، و "[-]INF" أو "[-]INFINITY" أو "NAN" في حالة تحويل F).

g، G
    يُحول معامل double بالأسلوب f أو e (أو F أو E لتحويلات G). تحدد الدقة عدد الأرقام المعنوية. إذا كانت الدقة مفقودة، يتم إعطاء 6 أرقام؛ إذا كانت الدقة صفرًا، تُعامل كـ 1. يُستخدم الأسلوب e إذا كان الأس من تحويله أقل من -4 أو أكبر من أو يساوي الدقة. تُحذف الأصفار اللاحقة من الجزء الكسري من النتيجة؛ وتظهر الفاصلة العشرية فقط إذا تبعها رقم واحد على الأقل.

a، A
    (C99؛ ليس في SUSv2، ولكن أُضيف في SUSv3) لتحويل a، يُحوّل معطى double إلى تدوين ست عشري (باستخدام الأحرف abcdef) بالنمط [-]0xh.hhhhp±d؛ أما لتحويل A فيُستخدم البادئة 0X والأحرف ABCDEF وفاصل الأس P. يوجد رقم ست عشري واحد قبل الفاصلة الشعاعية، وعدد الأرقام بعدها يساوي الدقة. تكفي الدقة المبدئية لتمثيل دقيق للقيمة إذا كان هناك تمثيل دقيق في الأساس 2، وإلا فإنها تكون كبيرة بما يكفي لتمييز القيم من النوع double. الرقم قبل الفاصلة الشعاعية غير محدد للأرقام غير المعييرة، وغير صفري ولكنه غير محدد للأرقام المعييرة. الأس، d، هو أس الأساس 2 المناسب معبراً عنه كعدد عشري صحيح؛ ويحتوي دائماً على رقم واحد على الأقل؛ وإذا كانت القيمة صفراً، فإن الأس يكون 0.

c   إذا لم يكن هناك معدل l، يُحول معامل int إلى unsigned char، ويُكتب المحرف الناتج. إذا وُجد معدل l، يُحول معامل wint_t (محرف واسع) إلى تسلسل متعدد البايتات عن طريق استدعاء الدالة wcrtomb(3)، مع حالة تحويل تبدأ في الحالة المبدئية، وتُكتب السلسلة متعددة البايتات الناتجة.

s   في حال عدم وجود معدّل l: يُتوقع أن يكون معطى const char * مؤشراً إلى مصفوفة من نوع محارف (مؤشر إلى سلسلة نصية). تُكتب المحارف من المصفوفة وصولاً إلى (دون تضمين) بايت الخلو المنتهي ('\0')؛ وإذا حُددت الدقة، فلا يُكتب أكثر من العدد المحدد. إذا أُعطيت الدقة، فلا يشترط وجود بايت الخلو؛ أما إذا لم تُحدد الدقة، أو كانت أكبر من حجم المصفوفة، فيجب أن تحتوي المصفوفة على بايت خلو منتهٍ.

    في حال وجود معدّل l: يُتوقع أن يكون معطى const wchar_t * مؤشراً إلى مصفوفة من المحارف العريضة. تُحوّل المحارف العريضة من المصفوفة إلى محارف متعددة البايتات (كل منها عبر استدعاء للدالة wcrtomb(3)، مع حالة تحويل تبدأ من الحالة الأولية قبل أول محرف عريض)، وصولاً إلى محرف الخلو العريض المنتهي وتضمينه. تُكتب المحارف متعددة البايتات الناتجة وصولاً إلى (دون تضمين) بايت الخلو المنتهي. إذا حُددت الدقة، فلا يُكتب أكثر من عدد البايتات المحدد، ولكن لا تُكتب محارف متعددة بايتات جزئية. لاحظ أن الدقة تحدد عدد البايتات المكتوبة، وليس عدد المحارف العريضة أو مواقع الشاشة. يجب أن تحتوي المصفوفة على محرف خلو عريض منتهٍ، ما لم تُعطَ دقة صغيرة جداً بحيث يتجاوزها عدد البايتات المكتوبة قبل الوصول إلى نهاية المصفوفة.

C   (ليس في C99 أو C11، ولكنه في SUSv2 وSUSv3 وSUSv4.) مرادف لـ lc. لا تستخدمه.

S   (ليس في C99 أو C11، ولكنه في SUSv2 وSUSv3 وSUSv4.) مرادف لـ ls. لا تستخدمه.

p   يُطبع معطى المؤشر void * بالتمثيل الست عشري (كما لو كان عبر %#x أو %#lx).

n   يُخزن عدد المحارف المكتوبة حتى الآن في العدد الصحيح الذي يشير إليه المعطى المقابل. يجب أن يكون هذا المعطى من نوع int *، أو ناعاً يطابق حجمه معدّل طول العدد الصحيح المرفق (اختيارياً). لا يُحوّل أي معطى. (هذا المحدد غير مدعوم في مكتبة bionic C.) السلوك غير محدد إذا تضمن تخصيص التحويل أي أعلام أو عرض حقل أو دقة.

m   (امتداد glibc؛ مدعوم بواسطة uClibc وmusl، وعلى أندرويد من مستوى API 29.) يطبع مخرجات strerror(errno) (أو strerrorname_np(errno) في الشكل البديل). لا يتطلب أي معطى.

%   تُكتب العلامة '%'. لا يُحوّل أي معطى. تخصيص التحويل الكامل هو '%%'.

قيمة الإرجاع
عند العودة بنجاح، تعيد هذه الدوال عدد البايتات المطبوعة (باستثناء بايت الخلو المستخدم لإنهاء المخرجات إلى السلاسل النصية).

عند حدوث خطأ، تُعاد قيمة سالبة، ويُضبط errno للإشارة إلى الخطأ.

الأخطاء
انظر write(2) و putwc(3). بالإضافة إلى ذلك، قد يحدث الخطأ التالي:

EOVERFLOW
    القيمة المطلوب إرجاعها أكبر من INT_MAX.

قد تفشل الدالة dprintf() بالإضافة إلى ذلك إذا:

EBADF
    كان معطى fd واصف ملف غير صالح.

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
printf(), fprintf(), vprintf(), vfprintf() | سلامة الخيوط | المنطقة (locale) آمنة لتعدد المسالك (MT-Safe)

المعايير

fprintf()
printf()
vprintf()
vfprintf()
    C11, POSIX.1-2008.

dprintf()
vdprintf()
    جنو، POSIX.1-2008.

التاريخ

fprintf()
printf()
vprintf()
vfprintf()
    C89, POSIX.1-2001.

dprintf()
vdprintf()
    جنو، POSIX.1-2008.

الإصدار 4 من دليل X/Open للنقلية (SUSv1، 1994) أضاف '.

أضاف glibc 2.1 معدلات الطول hh وj وt وz وأحرف التحويل a وA.

أضاف glibc 2.2 حرف التحويل F بدلالات C99، وحرف العلم I.

أعطى glibc 2.35 معنى للشكل البديل (#) لمحدد التحويل m، وهو %#m.

العلل
غالبًا ما يشير كود مثل printf(foo); إلى علة، بما أن foo قد تحتوي على المحرف %. إذا كانت foo تأتي من مدخلات مستخدم غير موثوقة، فقد تحتوي على %n، مما يسبب كتابة استدعاء printf() في الذاكرة وإنشاء ثغرة أمنية.

أمثلة
لطباعة Pi حتى خمس مراتب عشرية:

    #include <math.h>
    #include <stdio.h>
    fprintf(stdout, "pi = %.5f\n", 4 * atan(1.0));

لطباعة التاريخ والوقت بصيغة "الأحد، 3 يوليو، 10:02"، حيث weekday و month مؤشرات إلى سلاسل:

    #include <stdio.h>
    fprintf(stdout, "%s, %s %d, %.2d:%.2d\n",
            weekday, month, day, hour, min);

تستخدم العديد من البلدان ترتيب يوم-شهر-سنة. ومن ثم، يجب أن تكون النسخة المدوّلة قادرة على طباعة المعطيات بترتيب يحدده التنسيق:

    #include <stdio.h>
    fprintf(stdout, format,
            weekday, month, day, hour, min);

حيث يعتمد format على المحلية، وقد يبدل المعاملات. مع القيمة:

    "%1$s, %3$d. %2$s, %4$d:%5$.2d\n"

قد يحصل المرء على "Sonntag, 3. Juli, 10:02".

انظر أيضًا
printf(1)، asprintf(3)، puts(3)، scanf(3)، setlocale(3)، snprintf(3)، strfromd(3)، wcrtomb(3)، wprintf(3)، locale(5)

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

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

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