.\" -*- coding: UTF-8 -*- .\" Copyright 2009-2015, Michael Kerrisk .\" Copyright 1992, Drew Eckhardt .\" 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 read 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم read \- قراءة من واصف ملف .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBssize_t read(\fPsize_t count; \fB int \fP\fIfd\fP\fB, void \fP\fIbuf\fP\fB[\fP\fIcount\fP\fB], size_t \fP\fIcount\fP\fB);\fP .fi .SH الوصف \fBread\fP() تحاول قراءة حتى \fIcount\fP بايت من واصف الملف \fIfd\fP إلى المخزن المؤقت الذي يبدأ عند \fIbuf\fP. .P في الملفات التي تدعم البحث، تبدأ عملية القراءة عند إزاحة الملف، وتُزاد إزاحة الملف بعدد البايتات المقروءة. إذا كانت إزاحة الملف عند نهاية الملف أو بعدها، لا تُقرأ أي بايتات، وتُرجع \fBread\fP() صفرًا. .P إذا كان \fIcount\fP صفرًا، \fBread\fP() \fIقد\fP تكتشف الأخطاء الموصوفة أدناه. في غياب أي أخطاء، أو إذا لم تتحقق \fBread\fP() من الأخطاء، فإن \fBread\fP() مع \fIcount\fP بقيمة 0 تُرجع صفرًا وليس لها تأثيرات أخرى. .P وفقًا لـ POSIX.1، إذا كانت \fIcount\fP أكبر من \fBSSIZE_MAX\fP، فإن النتيجة تكون محددة بواسطة التنفيذ؛ انظر «ملاحظات» للحد الأقصى في لينكس. .SH "قيمة الإرجاع" عند النجاح، يُرجع عدد البايتات المقروءة (الصفر يشير إلى نهاية الملف)، ويُقدم موضع الملف بهذا العدد. ليس خطأً إذا كان هذا العدد أصغر من عدد البايتات المطلوبة؛ قد يحدث هذا مثلاً لأن بايتات أقل متاحة فعليًا الآن (ربما لأننا كنا قريبين من نهاية الملف، أو لأننا نقرأ من أنبوب، أو من طرفية)، أو لأن \fBread\fP() قُطعت بإشارة. انظر أيضًا NOTES. .P عند الخطأ، يُرجع \-1، ويُضبط \fIerrno\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 \fBEFAULT\fP \fIbuf\fP خارج مساحة العنوان التي يمكنك الوصول إليها. .TP \fBEINTR\fP قُطعت الاستدعاء بإشارة قبل قراءة أي بيانات؛ انظر \fBsignal\fP(7). .TP \fBEINVAL\fP \fIfd\fP مُرفق بكائن غير مناسب للقراءة؛ أو فُتح الملف بالعلم \fBO_DIRECT\fP، وإما العنوان المحدد في \fIbuf\fP، أو القيمة المحددة في \fIcount\fP، أو إزاحة الملف غير محاذية بشكل مناسب. .TP \fBEINVAL\fP أُنشئ \fIfd\fP عبر استدعاء لـ \fBtimerfd_create\fP(2) وأُعطي مخزن مؤقت بحجم خاطئ لـ \fBread\fP()؛ انظر \fBtimerfd_create\fP(2) لمزيد من المعلومات. .TP \fBEIO\fP خطأ I/O. سيحدث هذا مثلاً عندما تكون العملية في مجموعة عمليات خلفية، وتحاول القراءة من طرفيتها المسيطرة، وإما تتجاهل أو تحجب \fBSIGTTIN\fP أو أن مجموعتها العملياتية يتيمة. قد يحدث أيضًا عندما يكون هناك خطأ I/O منخفض المستوى أثناء القراءة من قرص أو شريط. سبب محتمل آخر لـ \fBEIO\fP على أنظمة الملفات الشبكية هو عندما أُخذ قفل استشاري على واصف الملف وفُقد هذا القفل. انظر قسم \fILost locks\fP من \fBfcntl\fP(2) لمزيد من التفاصيل. .TP \fBEISDIR\fP \fIfd\fP يشير إلى دليل. .P قد تحدث أخطاء أخرى، اعتمادًا على الكائن المتصل بـ \fIfd\fP. .SH المعايير POSIX.1\-2008. .SH التاريخ SVr4، 4.3BSD، POSIX.1\-2001. .SH ملاحظات .\" commit e28cc71572da38a5a12c1cfe4d7032017adccf69 في لينكس، \fBread\fP() (واستدعاءات نظام مشابهة) ستنقل على الأكثر 0x7ffff000 (2,147,479,552) بايت، مع إرجاع عدد البايتات المنقولة فعليًا. (هذا صحيح على كل من الأنظمة 32\-bit و64\-bit.) .P في أنظمة ملفات NFS، قراءة كميات صغيرة من البيانات ستحدث الطابع الزمني فقط في المرة الأولى، وقد لا تفعل الاستدعاءات اللاحقة ذلك. هذا ناتج عن تخزين سمات جانب العميل مؤقتًا، لأن معظم إن لم يكن كل عملاء NFS يتركون تحديثات \fIst_atime\fP (وقت آخر وصول للملف) للخادم، والقراءات من جانب العميل المُرضاة من خبيئة العميل لن تسبب تحديثات \fIst_atime\fP على الخادم حيث لا توجد قراءات من جانب الخادم. يمكن الحصول على دلالات UNIX بتعطيل تخزين سمات جانب العميل مؤقتًا، لكن في معظم الحالات سيزيد هذا بشكل كبير من حمل الخادم ويقلل الأداء. .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 من بين واجهات برمجة التطبيقات المدرجة لاحقًا \fBread\fP() و\fBreadv\fP(2). ومن بين التأثيرات التي يجب أن تكون ذرية عبر الخيوط (والعمليات) هي تحديثات إزاحة الملف. ومع ذلك، قبل لينكس 3.14، لم يكن هذا هو الحال: إذا قامت عمليتان تشاركان وصف ملف مفتوح (انظر \fBopen\fP(2)) بتنفيذ \fBread\fP() (أو \fBreadv\fP(2)) في نفس الوقت، فإن عمليات I/O لم تكن ذرية فيما يتعلق بتحديث إزاحة الملف، مما أدى إلى أن القراءات في العمليتين قد تتداخل (بشكل غير صحيح) في كتل البيانات التي حصلتا عليها. تم إصلاح هذه المشكلة في لينكس 3.14. .SH "انظر أيضًا" \fBclose\fP(2), \fBfcntl\fP(2), \fBioctl\fP(2), \fBlseek\fP(2), \fBopen\fP(2), \fBpread\fP(2), \fBreaddir\fP(2), \fBreadlink\fP(2), \fBreadv\fP(2), \fBselect\fP(2), \fBwrite\fP(2), \fBfread\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 .