.\" -*- coding: UTF-8 -*- .\" Copyright Drew Eckhardt .\" Copyright 1995, Nicolai Langfeldt .\" Copyright 2006-2014, 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 stat 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم stat, fstat, lstat, fstatat \- الحصول على حالة الملف .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBint stat(const char *restrict \fP\fIpath\fP\fB,\fP \fB struct stat *restrict \fP\fIstatbuf\fP\fB);\fP \fBint fstat(int \fP\fIfd\fP\fB, struct stat *\fP\fIstatbuf\fP\fB);\fP \fBint lstat(const char *restrict \fP\fIpath\fP\fB,\fP \fB struct stat *restrict \fP\fIstatbuf\fP\fB);\fP .P \fB#include \fP/* تعريف ثوابت \fBAT_*\fP */ \fB#include \fP .P \fBint fstatat(int \fP\fIdirfd\fP\fB, const char *restrict \fP\fIpath\fP\fB,\fP \fB struct stat *restrict \fP\fIstatbuf\fP\fB, int \fP\fIflags\fP\fB);\fP .fi .P .RS -4 متطلبات ماكروات اختبار الميزات لـ glibc (انظر \fBfeature_test_macros\fP(7)): .RE .P \fBlstat\fP(): .nf .\" _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED /* منذ glibc 2.20 */ _DEFAULT_SOURCE || _XOPEN_SOURCE >= 500 || /* منذ glibc 2.10: */ _POSIX_C_SOURCE >= 200112L || /* إصدار glibc 2.19 وما قبله */ _BSD_SOURCE .fi .P \fBfstatat\fP(): .nf منذ glibc 2.10: _POSIX_C_SOURCE >= 200809L قبل glibc 2.10: _ATFILE_SOURCE .fi .SH الوصف تعيد هذه الدوال معلومات حول ملف، في المخزن المؤقت المشار إليه بـ \fIstatbuf\fP. لا تتطلب أذونات على الملف نفسه، ولكن\[em]في حالة \fBstat\fP() و \fBfstatat\fP() و \fBlstat\fP()\[em]يتطلب إذن تنفيذ (بحث) على جميع الأدلة في \fIpath\fP التي تؤدي إلى الملف. .P \fBstat\fP() و \fBfstatat\fP() تسترجعان معلومات حول الملف المشار إليه بـ \fIpath\fP؛ الاختلافات لـ \fBfstatat\fP() موصوفة أدناه. .P \fBlstat\fP() مطابق لـ \fBstat\fP()، باستثناء أنه إذا كان \fIpath\fP رابطًا رمزيًا، فإنه يعيد معلومات حول الرابط نفسه، وليس الملف الذي يشير إليه الرابط. .P .\" \fBfstat\fP() مطابق لـ \fBstat\fP()، باستثناء أن الملف الذي سيُسترجع معلومات عنه يُحدد بواسطة واصف الملف \fIfd\fP. .SS "هيكل stat" تعيد جميع استدعاءات النظام هذه هيكل \fIstat\fP (انظر \fBstat\fP(3type)). .P .\" Background: inode attributes are modified with i_mutex held, but .\" read by stat() without taking the mutex. \fIملاحظة\fP: لأسباب تتعلق بالأداء والبساطة، قد تحتوي حقول مختلفة في هيكل \fIstat\fP على معلومات حالة من لحظات مختلفة أثناء تنفيذ استدعاء النظام. على سبيل المثال، إذا غُيّر \fIst_mode\fP أو \fIst_uid\fP بواسطة عملية أخرى باستدعاء \fBchmod\fP(2) أو \fBchown\fP(2)، فقد يعيد \fBstat\fP() \fIst_mode\fP القديم مع \fIst_uid\fP الجديد، أو \fIst_uid\fP القديم مع \fIst_mode\fP الجديد. .SS fstatat() استدعاء النظام \fBfstatat\fP() هو واجهة أكثر عمومية للوصول إلى معلومات الملف والتي لا تزال قادرة على توفير سلوك كل من \fBstat\fP() و \fBlstat\fP() و \fBfstat\fP() بدقة. .P إذا كان \fIpath\fP نسبيًا، فإنه يُفسر بالنسبة للدليل المشار إليه بواسطة واصف الملف \fIdirfd\fP (بدلاً من دليل العمل الحالي للمستدعِي، كما تفعل \fBstat\fP() و \fBlstat\fP() لاسم مسار نسبي). .P إذا كان \fIpath\fP نسبيًا و \fIdirfd\fP هو القيمة الخاصة \fBAT_FDCWD\fP، فإن \fIpath\fP يُفسر بالنسبة لدليل العمل الحالي للمستدعِي (مثل \fBstat\fP() و \fBlstat\fP()). .P إذا كان المسار \fIpath\fP مطلقاً، فُيتجاهل \fIdirfd\fP. .P يمكن أن تكون \fIflags\fP إما 0، أو تتضمن علماً واحداً أو أكثر من الأعلام التالية مجمعة بـ OR: .TP \fBAT_EMPTY_PATH\fP (منذ لينكس 2.6.39) .\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d .\" Before glibc 2.16, defining _ATFILE_SOURCE sufficed إذا كان \fIpath\fP سلسلة فارغة (أو NULL، منذ Linux 6.11) فسيُعمل على الملف المشار إليه بـ \fIdirfd\fP (والذي قد يكون قد وُصل إليه باستخدام علم \fBopen\fP(2) \fBO_PATH\fP). في هذه الحالة، يمكن أن يشير \fIdirfd\fP إلى أي نوع من الملفات، وليس فقط دليل، وسلوك \fBfstatat\fP() مشابه لسلوك \fBfstat\fP(). إذا كان \fIdirfd\fP هو \fBAT_FDCWD\fP، فإن الاستدعاء يعمل على دليل العمل الحالي. هذا العلم خاص بـ Linux؛ عرّف \fB_GNU_SOURCE\fP للحصول على تعريفه. .TP \fBAT_NO_AUTOMOUNT\fP (منذ Linux 2.6.38) لا تَقُم بالوصل الآلي للمكون الطرفي ("basename") لـ \fIpath\fP. منذ Linux 3.1 يُتجاهل هذا العلم. ومنذ Linux 4.11 يكون هذا العلم ضمنياً. .TP \fBAT_SYMLINK_NOFOLLOW\fP إذا كان \fIpath\fP رابطاً رمزياً، فلا تقم بفك الإشارة إليه: بل أعد معلومات حول الرابط نفسه، مثل \fBlstat\fP(). (بشكل مبدئي، يقوم \fBfstatat\fP() بفك إشارة الروابط الرمزية، مثل \fBstat\fP().) .P انظر \fBopenat\fP(2) لشرح الحاجة إلى \fBfstatat\fP(). .SH "قيمة الإرجاع" عند النجاح، يُعاد الصفر. وعند حدوث خطأ، يُعاد الرقم \-1، ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEACCES\fP رُفض إذن البحث لأحد الأدلة في بادئة مسار \fIpath\fP. (انظر أيضًا \fBpath_resolution\fP(7).) .TP \fBEBADF\fP \fIfd\fP ليس واصف ملف مفتوحًا صالحًا. .TP \fBEBADF\fP (\fBfstatat\fP()) \fIpath\fP نسبي لكن \fIdirfd\fP ليس \fBAT_FDCWD\fP ولا واصف ملف صالح. .TP \fBEFAULT\fP عنوان سيء. .TP \fBEINVAL\fP (\fBfstatat\fP()) عُلم غير صالح محدد في \fIflags\fP. .TP \fBELOOP\fP صُودف عدد كبير جداً من الروابط الرمزية أثناء اجتياز المسار. .TP \fBENAMETOOLONG\fP المسار \fIpath\fP طويل جداً. .TP \fBENOENT\fP أحد مكونات \fIpath\fP غير موجود أو أنه وصلة رمزية معلقة. .TP \fBENOENT\fP \fIpath\fP سلسلة فارغة ولم يُحدد \fBAT_EMPTY_PATH\fP في \fIflags\fP. .TP \fBENOMEM\fP نفاد الذاكرة (أي ذاكرة نواة الحاسوب). .TP \fBENOTDIR\fP أحد مكونات بادئة المسار لـ \fIpath\fP ليس دليلاً. .TP \fBENOTDIR\fP (\fBfstatat\fP()) \fIpath\fP نسبي و \fIdirfd\fP هو واصف ملف يشير إلى ملف غير دليل. .TP \fBEOVERFLOW\fP يشير \fIpath\fP أو \fIfd\fP إلى ملف لا يمكن تمثيل حجمه أو رقم inode أو عدد الكتل فيه في الأنواع \fIoff_t\fP أو \fIino_t\fP أو \fIblkcnt_t\fP على التوالي. يمكن أن يحدث هذا الخطأ عندما، على سبيل المثال، يستدعي تطبيق جُمّع على منصة 32 بت بدون \fI\-D_FILE_OFFSET_BITS=64\fP الدالة \fBstat\fP() على ملف يتجاوز حجمه \fI(1<<31)\-1\fP بايت. .SH المعايير POSIX.1\-2024. .SH التاريخ .TP \fBstat\fP() .TQ \fBfstat\fP() .TQ \fBlstat\fP() .\" SVr4 documents additional .\" .BR fstat () .\" error conditions EINTR, ENOLINK, and EOVERFLOW. SVr4 .\" documents additional .\" .BR stat () .\" and .\" .BR lstat () .\" error conditions EINTR, EMULTIHOP, ENOLINK, and EOVERFLOW. SVr4، 4.3BSD، POSIX.1\-2001. .TP \fBfstatat\fP() POSIX.1\-2008. لينكس 2.6.16،‏ glibc 2.4. .P وفقًا لـ POSIX.1\-2001، يجب على \fBlstat\fP() عند استدعائه على وصلة رمزية أن يرجع معلومات صالحة فقط في الحقل \fIst_size\fP ونوع الملف في الحقل \fIst_mode\fP من بنية \fIstat\fP. شددت المواصفة POSIX.1\-2008 هذه المتطلبات، حيث ألزمت \fBlstat\fP() بإرجاع معلومات صالحة في جميع الحقول باستثناء بتات الوضع (mode bits) في \fIst_mode\fP. .P قد يكون استخدام الحقلين \fIst_blocks\fP و \fIst_blksize\fP أقل قابلية للنقل. (أُدخل هذان الحقلان في BSD. ويختلف تفسيرهما بين الأنظمة، وربما يختلفان في النظام الواحد عند وجود عمليات وصل NFS.) .SS "الاختلافات بين مكتبة C والنواة" .\" See include/asm-i386/stat.h in the Linux 2.4 source code for the .\" various versions of the structure definitions بمرور الوقت، أدت الزيادات في حجم بنية \fIstat\fP إلى ظهور ثلاث نسخ متتالية من \fBstat\fP(): وهي \fIsys_stat\fP() (الموضع \fI__NR_oldstat\fP)، و \fIsys_newstat\fP() (الموضع \fI__NR_stat\fP)، و \fIsys_stat64()\fP (الموضع \fI__NR_stat64\fP) على المنصات ذات 32\-بت مثل i386. كانت النسختان الأوليان موجودتين بالفعل في لينكس 1.0 (وإن كانا بأسماء مختلفة)؛ أما الأخيرة فقد أُضيفت في لينكس 2.4. تنطبق ملاحظات مماثلة على \fBfstat\fP() و \fBlstat\fP(). .P نسخ بنية \fIstat\fP الداخلية في النواة التي تتعامل معها النسخ المختلفة هي على التوالي: .TP \fI__old_kernel_stat\fP البنية الأصلية، بحقول ضيقة نوعًا ما، وبدون حشو (padding). .TP \fIstat\fP حقل \fIst_ino\fP أكبر مع إضافة حشو إلى أجزاء مختلفة من البنية للسماح بالتوسع المستقبلي. .TP \fIstat64\fP حقل \fIst_ino\fP أكبر، وحقول \fIst_uid\fP و \fIst_gid\fP أكبر لاستيعاب توسعة لينكس\-2.4 لـ UIDs و GIDs إلى 32 بت، وحقول أخرى متنوعة مُوسعة مع حشو إضافي في البنية. (استُنفدت بايتات الحشو المختلفة في نهاية المطاف في لينكس 2.6، مع ظهور معرفات الأجهزة (device IDs) ذات 32 بت ومكونات النانو ثانية لحقول الطوابع الزمنية.) .P .\" .\" A note from Andries Brouwer, July 2007 .\" .\" > Is the story not rather more complicated for some calls like .\" > stat(2)? .\" .\" Yes and no, mostly no. See "/usr/include/sys/stat.h". .\" .\" The idea is here not so much that syscalls change, but that .\" the definitions of struct stat and of the types dev_t and mode_t change. .\" This means that libc (even if it does not call the kernel .\" but only calls some internal function) must know what the .\" format of dev_t or of struct stat is. .\" The communication between the application and libc goes via .\" the include file that defines a _STAT_VER and .\" _MKNOD_VER describing the layout of the data that user space .\" uses. Each (almost each) occurrence of stat() is replaced by .\" an occurrence of xstat() where the first parameter of xstat() .\" is this version number _STAT_VER. .\" .\" Now, also the definitions used by the kernel change. .\" But glibc copes with this in the standard way, and the .\" struct stat as returned by the kernel is repacked into .\" the struct stat as expected by the application. .\" Thus, _STAT_VER and this setup cater for the application-libc .\" interface, rather than the libc-kernel interface. .\" .\" (Note that the details depend on gcc being used as c compiler.) تخفي دالة الغلاف \fBstat\fP() في مكتبة glibc هذه التفاصيل عن التطبيقات، حيث تستدعي أحدث نسخة من استدعاء النظام الذي توفره النواة، وتُعيد حزم المعلومات المُرجعة إذا لزم الأمر للبرمجيات الثنائية القديمة. .P على الأنظمة الحديثة ذات 64\-بت، الأمر أبسط: يوجد استدعاء نظام \fBstat\fP() واحد وتتعامل النواة مع بنية \fIstat\fP تحتوي على حقول ذات أحجام كافية. .P .\" strace(1) shows the name "newfstatat" on x86-64 استدعاء النظام الأساسي الذي تستخدمه دالة الغلاف \fBfstatat\fP() في glibc يُسمى في الواقع \fBfstatat64\fP() أو \fBnewfstatat\fP() في بعض المعماريات. .SH أمثلة يستدعي البرنامج التالي \fBlstat\fP() ويعرض حقولاً مختارة في هيكل \fIstat\fP المُعاد. .P .\" SRC BEGIN (stat.c) .EX #include #include #include #include #include #include \& int main(int argc, char *argv[]) { struct stat sb; \& if (argc != 2) { fprintf(stderr, "Usage: %s \[rs]n", argv[0]); exit(EXIT_FAILURE); } \& if (lstat(argv[1], &sb) == \-1) { perror("lstat"); exit(EXIT_FAILURE); } \& printf("معرف الجهاز الحاوي: [%x,%x]\[rs]n", major(sb.st_dev), minor(sb.st_dev)); \& printf("نوع الملف: "); \& switch (sb.st_mode & S_IFMT) { case S_IFBLK: printf("جهاز كتلي\[rs]n"); break; case S_IFCHR: printf("جهاز محرفي\[rs]n"); break; case S_IFDIR: printf("دليل\[rs]n"); break; case S_IFIFO: printf("FIFO/أنبوب\[rs]n"); break; case S_IFLNK: printf("وصلة رمزية\[rs]n"); break; case S_IFREG: printf("ملف عادي\[rs]n"); break; case S_IFSOCK: printf("مقبس\[rs]n"); break; default: printf("غير معروف؟\[rs]n"); break; } \& printf("رقم الآي\-نود: %ju\[rs]n", (uintmax_t) sb.st_ino); \& printf("الوضع: %jo (ثماني)\[rs]n", (uintmax_t) sb.st_mode); \& printf("عدد الوصلات: %ju\[rs]n", (uintmax_t) sb.st_nlink); printf("الملكية: UID=%ju GID=%ju\[rs]n", (uintmax_t) sb.st_uid, (uintmax_t) sb.st_gid); \& printf("حجم كتلة الإدخال/الإخراج المفضل: %jd بايت\[rs]n", (intmax_t) sb.st_blksize); printf("حجم الملف: %jd بايت\[rs]n", (intmax_t) sb.st_size); printf("الكتل المخصصة: %jd\[rs]n", (intmax_t) sb.st_blocks); \& printf("آخر تغيير للحالة: %s", ctime(&sb.st_ctime)); printf("آخر وصول للملف: %s", ctime(&sb.st_atime)); printf("آخر تعديل للملف: %s", ctime(&sb.st_mtime)); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "انظر أيضًا" \fBls\fP(1)، \fBstat\fP(1)، \fBaccess\fP(2)، \fBchmod\fP(2)، \fBchown\fP(2)، \fBreadlink\fP(2)، \fBstatx\fP(2)، \fButime\fP(2)، \fBstat\fP(3type)، \fBcapabilities\fP(7)، \fBinode\fP(7)، \fBsymlink\fP(7) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .