.\" -*- coding: UTF-8 -*- .\" Copyright 1992, Drew Eckhardt .\" Copyright 1993, Ian Jackson .\" Copyright 2007, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH write 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم write \- الكتابة إلى واصف ملف .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBssize_t write(\fPsize_t count; \fB int \fP\fIfd\fP\fB, const void \fP\fIbuf\fP\fB[\fP\fIcount\fP\fB], size_t \fP\fIcount\fP\fB);\fP .fi .SH الوصف تكتب \fBwrite\fP() حتى \fIcount\fP بايت من المخزن المؤقت الذي يبدأ عند \fIbuf\fP إلى الملف المشار إليه بواصف الملف \fIfd\fP. .P قد يكون عدد البايتات المكتوبة أقل من \fIcount\fP إذا، على سبيل المثال، كانت المساحة غير كافية على الوسيط المادي الأساسي، أو تم مواجهة حد المورد \fBRLIMIT_FSIZE\fP (انظر \fBsetrlimit\fP(2))، أو تمت مقاطعة الاستدعاء بواسطة معالج إشارة بعد كتابة أقل من \fIcount\fP بايت. (انظر أيضًا \fBpipe\fP(7).) .P بالنسبة لملف قابل للبحث (أي ملف يمكن تطبيق \fBlseek\fP(2) عليه، على سبيل المثال ملف عادي) تتم الكتابة عند إزاحة الملف، وتُزاد إزاحة الملف بعدد البايتات المكتوبة فعليًا. إذا تم فتح الملف باستخدام \fBO_APPEND\fP عبر \fBopen\fP(2)، تُضبط إزاحة الملف أولاً إلى نهاية الملف قبل الكتابة. يتم تعديل إزاحة الملف وعملية الكتابة كخطوة ذرية. .P تتطلب POSIX أن \fBread\fP(2) التي يمكن إثبات حدوثها بعد عودة \fBwrite\fP() ستعيد البيانات الجديدة. لاحظ أن ليست جميع أنظمة الملفات متوافقة مع POSIX. .P وفقًا لـ POSIX.1، إذا كانت \fIcount\fP أكبر من \fBSSIZE_MAX\fP، فإن النتيجة تكون محددة بواسطة التنفيذ؛ انظر «ملاحظات» للحد الأقصى في لينكس. .SH "قيمة الإرجاع" عند النجاح، يُعاد عدد البايتات المكتوبة. عند الخطأ، يُعاد \-1، ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .P لاحظ أن \fBwrite\fP() ناجحة قد تنقل أقل من \fIcount\fP بايت. يمكن أن تحدث هذه الكتابات الجزئية لأسباب متنوعة؛ على سبيل المثال، بسبب عدم وجود مساحة كافية على جهاز القرص لكتابة جميع البايتات المطلوبة، أو بسبب مقاطعة \fBwrite\fP() محظورة إلى مقبس أو أنبوب أو ما شابه بواسطة معالج إشارة بعد نقل بعض البايتات، ولكن قبل نقل جميع البايتات المطلوبة. في حالة كتابة جزئية، يمكن للمستدعي إجراء استدعاء \fBwrite\fP() آخر لنقل البايتات المتبقية. سينقل الاستدعاء اللاحق بايتات إضافية أو قد يؤدي إلى خطأ (مثلًا، إذا كان القرص ممتلئًا الآن). .P إذا كان \fIcount\fP صفرًا ويشير \fIfd\fP إلى ملف عادي، فقد تُرجع \fBwrite\fP() حالة فشل إذا تم اكتشاف أحد الأخطاء أدناه. إذا لم يتم اكتشاف أخطاء، أو لم يتم إجراء اكتشاف الأخطاء، يُعاد 0 دون أي تأثير آخر. إذا كان \fIcount\fP صفرًا ويشير \fIfd\fP إلى ملف غير عادي، فالنتائج غير محددة. .SH الأخطاء .TP \fBEAGAIN\fP يشير واصف الملف \fIfd\fP إلى ملف غير مقبس وتم وضع علامة عدم الحظر عليه (\fBO_NONBLOCK\fP)، وستحظر الكتابة. انظر \fBopen\fP(2) لمزيد من التفاصيل حول العلم \fBO_NONBLOCK\fP. .TP \fBEAGAIN\fP أو \fBEWOULDBLOCK\fP .\" Actually EAGAIN on Linux يشير واصف الملف \fIfd\fP إلى مقبس وتم وضع علامة عدم الحظر عليه (\fBO_NONBLOCK\fP)، وستحظر الكتابة. تسمح POSIX.1\-2001 بإعادة أي من الخطأين لهذه الحالة، ولا تتطلب أن تكون هذه الثوابت بنفس القيمة، لذا يجب على التطبيق المحمول التحقق من كلا الاحتمالين. .TP \fBEBADF\fP \fIfd\fP ليس واصف ملف صالحًا أو ليس مفتوحًا للكتابة. .TP \fBEDESTADDRREQ\fP يشير \fIfd\fP إلى مقبس بيانات مخطط لم يتم تعيين عنوان نظير له باستخدام \fBconnect\fP(2). .TP \fBEDQUOT\fP تم استنفاد حصة المستخدم من كتل القرص على نظام الملفات الذي يحتوي على الملف المشار إليه بواسطة \fIfd\fP. .TP \fBEFAULT\fP \fIbuf\fP خارج مساحة العنوان التي يمكنك الوصول إليها. .TP \fBEFBIG\fP تمت محاولة كتابة ملف يتجاوز الحد الأقصى لحجم الملف المحدد بالتنفيذ أو حد حجم ملف العملية، أو الكتابة في موضع يتجاوز الحد الأقصى المسموح به للإزاحة. .TP \fBEINTR\fP تمت مقاطعة الاستدعاء بواسطة إشارة قبل كتابة أي بيانات؛ انظر \fBsignal\fP(7). .TP \fBEINVAL\fP \fIfd\fP مرتبط بكائن غير مناسب للكتابة؛ أو تم فتح الملف بالعلم \fBO_DIRECT\fP، وإما العنوان المحدد في \fIbuf\fP، أو القيمة المحددة في \fIcount\fP، أو إزاحة الملف غير محاذية بشكل مناسب. .TP \fBEIO\fP .\" commit 088737f44bbf6378745f5b57b035e57ee3dc4750 حدث خطأ إدخال/إخراج منخفض المستوى أثناء تعديل inode. قد يتعلق هذا الخطأ بإعادة كتابة البيانات التي كتبتها \fBwrite\fP() سابقة، والتي قد تكون صدرت لواصف ملف مختلف على نفس الملف. منذ Linux 4.13، تأتي أخطاء إعادة الكتابة مع وعد بأنها \fIقد\fP تُبلغ بواسطة طلبات \fBwrite\fP() لاحقة، و\fIستُبلغ\fP بواسطة \fBfsync\fP(2) لاحقة (سواء تم الإبلاغ عنها أيضًا بواسطة \fBwrite\fP() أم لا). سبب بديل لـ \fBEIO\fP على أنظمة الملفات الشبكية هو عندما تم أخذ قفل استشاري على واصف الملف وتم فقدان هذا القفل. انظر قسم \fIالأقفال المفقودة\fP من \fBfcntl\fP(2) لمزيد من التفاصيل. .TP \fBENOSPC\fP الجهاز الذي يحتوي على الملف المشار إليه بواسطة \fIfd\fP ليس لديه مساحة للبيانات. .TP \fBEPERM\fP مُنعت العملية بواسطة ختم ملف؛ انظر \fBfcntl\fP(2). .TP \fBEPIPE\fP \fIfd\fP متصل بأنبوب أو مقبس تم إغلاق نهاية القراءة الخاصة به. عندما يحدث هذا، ستتلقى عملية الكتابة أيضًا إشارة \fBSIGPIPE\fP. (وبالتالي، تُرى قيمة إرجاع الكتابة فقط إذا قام البرنامج بالتقاط هذه الإشارة أو حظرها أو تجاهلها.) .P قد تحدث أخطاء أخرى، اعتمادًا على الكائن المتصل بـ \fIfd\fP. .SH المعايير POSIX.1\-2024. .SH التاريخ .\" SVr4 documents additional error .\" conditions EDEADLK, ENOLCK, ENOLNK, ENOSR, ENXIO, or ERANGE. SVr4، 4.3BSD، POSIX.1\-2001. .P تحت SVr4، قد تتم مقاطعة كتابة وتُعيد \fBEINTR\fP في أي نقطة، وليس فقط قبل كتابة أي بيانات. .SH ملاحظات العودة الناجحة من \fBwrite\fP() لا تضمن إيداع البيانات على القرص. على بعض أنظمة الملفات، بما في ذلك NFS، لا تضمن حتى حجز المساحة بنجاح للبيانات. في هذه الحالة، قد تتأخر بعض الأخطاء حتى \fBwrite\fP() مستقبلية، أو \fBfsync\fP(2)، أو حتى \fBclose\fP(2). الطريقة الوحيدة للتأكد هي استدعاء \fBfsync\fP(2) بعد الانتهاء من كتابة جميع بياناتك. .P إذا تمت مقاطعة \fBwrite\fP() بواسطة معالج إشارة قبل كتابة أي بايتات، يفشل الاستدعاء بالخطأ \fBEINTR\fP؛ إذا تمت مقاطعته بعد كتابة بايت واحد على الأقل، ينجح الاستدعاء، ويعيد عدد البايتات المكتوبة. .P .\" commit e28cc71572da38a5a12c1cfe4d7032017adccf69 على Linux، ستنقل \fBwrite\fP() (واستدعاءات النظام المماثلة) على الأكثر 0x7ffff000 (2,147,479,552) بايت، مع إعادة عدد البايتات المنقولة فعليًا. (هذا صحيح على كل من الأنظمة 32\-bit و 64\-bit.) .P قيمة إرجاع خطأ أثناء تنفيذ \fBwrite\fP() باستخدام الإدخال/الإخراج المباشر لا تعني فشل الكتابة بأكملها. قد تُكتب بيانات جزئية ويجب اعتبار البيانات عند إزاحة الملف التي تمت محاولة \fBwrite\fP() عليها غير متناسقة. .SH العلل وفقًا لـ POSIX.1\-2008/SUSv4 القسم XSI 2.9.7 («تفاعلات الخيوط مع عمليات الملفات العادية»): .P .RS 4 يجب أن تكون جميع الوظائف التالية ذرية (atomic) بالنسبة لبعضها البعض في التأثيرات المحددة في POSIX.1\-2008 عندما تعمل على ملفات عادية أو روابط رمزية: \&... .RE .P .\" http://thread.gmane.org/gmane.linux.kernel/1649458 .\" From: Michael Kerrisk (man-pages gmail.com> .\" Subject: Update of file offset on write() etc. is non-atomic with I/O .\" Date: 2014-02-17 15:41:37 GMT .\" Newsgroups: gmane.linux.kernel, gmane.linux.file-systems .\" commit 9c225f2655e36a470c4f58dbbc99244c5fc7f2d4 .\" Author: Linus Torvalds .\" Date: Mon Mar 3 09:36:58 2014 -0800 .\" .\" vfs: atomic f_pos accesses as per POSIX من بين واجهات برمجة التطبيقات المدرجة لاحقًا \fBwrite\fP() و \fBwritev\fP(2). ومن بين التأثيرات التي يجب أن تكون ذرية عبر الخيوط (والعمليات) هي تحديثات إزاحة الملف. ومع ذلك، قبل Linux 3.14، لم يكن الأمر كذلك: إذا قامت عمليتان تشتركان في وصف ملف مفتوح (انظر \fBopen\fP(2)) بتنفيذ \fBwrite\fP() (أو \fBwritev\fP(2)) في نفس الوقت، فإن عمليات الإدخال/الإخراج لم تكن ذرية فيما يتعلق بتحديث إزاحة الملف، مما أدى إلى احتمال تداخل كتل البيانات الناتجة عن العمليتين (بشكل غير صحيح). تم إصلاح هذه المشكلة في Linux 3.14. .SH "انظر أيضًا" \fBclose\fP(2), \fBfcntl\fP(2), \fBfsync\fP(2), \fBioctl\fP(2), \fBlseek\fP(2), \fBopen\fP(2), \fBpwrite\fP(2), \fBread\fP(2), \fBselect\fP(2), \fBwritev\fP(2), \fBfwrite\fP(3) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .