.\" -*- coding: UTF-8 -*- '\" t .\" 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 utimensat 2 "29 أكتوبر 2025" "صفحات دليل لينكس 6.18" .SH الاسم utimensat, futimens \- تغيير أختام الوقت للملف بدقة نانوثانية .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP /* تعريف ثوابت \fBAT_*\fP */ \fB#include \fP .P \fBint utimensat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpath\fP\fB,\fP \fB const struct timespec \fP\fItimes\fP\fB[_Nullable 2], int \fP\fIflags\fP\fB);\fP \fBint futimens(int \fP\fIfd\fP\fB, const struct timespec \fP\fItimes\fP\fB[_Nullable 2]);\fP .fi .P .RS -4 متطلبات ماكروات اختبار الميزات لـ glibc (انظر \fBfeature_test_macros\fP(7)): .RE .P \fButimensat\fP(): .nf منذ glibc 2.10: _POSIX_C_SOURCE >= 200809L قبل glibc 2.10: _ATFILE_SOURCE .fi .P \fBfutimens\fP(): .nf منذ glibc 2.10: _POSIX_C_SOURCE >= 200809L قبل glibc 2.10: _GNU_SOURCE .fi .SH الوصف تحدّث \fButimensat\fP() و\fBfutimens\fP() أختام الوقت للملف بدقة نانوثانية. يتناقض هذا مع \fButime\fP(2) و\fButimes\fP(2) التاريخيتين، اللتين تسمحان فقط بدقة ثانية وميكروثانية على التوالي عند ضبط أختام الوقت للملف. .P مع \fButimensat\fP() يُحدد الملف عبر اسم المسار المعطى في \fIpath\fP. مع \fBfutimens\fP() يُحدد الملف الذي ستُحدّث أختام وقته عبر واصف ملف مفتوح، \fIfd\fP. .P لكلا الاستدعاءين، تُحدد أختام الوقت الجديدة للملف في المصفوفة \fItimes\fP: يُحدد \fItimes[0]\fP "وقت الوصول الأخير" الجديد (\fIatime\fP)؛ يُحدد \fItimes[1]\fP "وقت التعديل الأخير" الجديد (\fImtime\fP). يُحدد كل عنصر من عناصر \fItimes\fP وقتًا بعدد الثواني والنانوثوان منذ العصر، 1970\-01\-01 00:00:00 +0000 (UTC). تُنقل هذه المعلومات في بنية \fBtimespec\fP(3). .P تُضبط أختام الوقت المحدّثة للملف إلى أكبر قيمة يدعمها نظام الملفات لا تتجاوز الوقت المحدد. .P .\" 2.6.22 was broken: it is not ignored إذا كان حقل \fItv_nsec\fP لإحدى بنى \fItimespec\fP يحمل القيمة الخاصة \fBUTIME_NOW\fP، فإن ختم الوقت المقابل للملف يُضبط إلى الوقت الحالي. إذا كان حقل \fItv_nsec\fP لإحدى بنى \fItimespec\fP يحمل القيمة الخاصة \fBUTIME_OMIT\fP، فإن ختم الوقت المقابل للملف يُترك دون تغيير. في كلتا هاتين الحالتين، يُتجاهل قيمة حقل \fItv_sec\fP المقابل. .P .\" إذا كان \fItimes\fP NULL، فإن كلا الختمين يُضبطان إلى الوقت الحالي. .P سيُضبط وقت تغيير الحالة (ctime) إلى الوقت الحالي، حتى لو لم تتغير أختام الوقت الأخرى فعليًا. .SS "متطلبات الأذونات" لضبط كلا ختمي الوقت للملف إلى الوقت الحالي (أي، \fItimes\fP هو NULL، أو كلا حقلي \fItv_nsec\fP يحددان \fBUTIME_NOW\fP)، إما: .IP \[bu] 3 .\" 2.6.22 was broken here -- for futimens() the check is .\" based on whether or not the file descriptor is writable, .\" not on whether the caller's effective UID has write .\" permission for the file referred to by the descriptor. يجب أن يكون لدى المستدعي صلاحية الكتابة إلى الملف؛ .IP \[bu] يجب أن يتطابق معرف المستخدم الفعّال للمستدعي مع مالك الملف؛ أو .IP \[bu] يجب أن يكون لدى المستدعي الامتيازات المناسبة. .P .\" 2.6.22 was broken here: .\" both must be something other than *either* UTIME_OMIT *or* UTIME_NOW. لإجراء أي تغيير غير ضبط كلا الختمين إلى الوقت الحالي (أي، \fItimes\fP ليس NULL، ولا حقل \fItv_nsec\fP هو \fBUTIME_NOW\fP ولا حقل \fItv_nsec\fP هو \fBUTIME_OMIT\fP)، يجب أن ينطبق الشرط 2 أو 3 أعلاه. .P .\" .\" إذا تم تحديد كلا حقلي \fItv_nsec\fP كـ \fBUTIME_OMIT\fP، فلا تُجرى أي فحوصات لملكية الملف أو أذوناته، ولا تُعدّل أختام الوقت للملف، ولكن قد تُكتشف شروط خطأ أخرى. .SS "خصوصيات utimensat()" إذا كان \fIpath\fP نسبيًا، فإنه يُفسر مبدئيًا بالنسبة إلى الدليل المشار إليه بواسطة واصف الملف المفتوح، \fIdirfd\fP (بدلاً من نسبته إلى دليل العمل الحالي للعملية المستدعية، كما تفعل \fButimes\fP(2) لاسم مسار نسبي). انظر \fBopenat\fP(2) لشرح لماذا يمكن أن يكون هذا مفيدًا. .P إذا كان المسار \fIpath\fP نسبيا وكان \fIdirfd\fP هو القيمة الخاصة \fBAT_FDCWD\fP، فسيُفسر \fIpath\fP نسبة إلى دليل العمل الحالي للعملية المستدعِيَة (مثل \fButimes\fP(2)). .P إذا كان المسار \fIpath\fP مطلقاً، فُيتجاهل \fIdirfd\fP. .P وسيطة \fIflags\fP هي قناع بتات يُنشأ بواسطة OR معًا صفر أو أكثر من القيم التالية المعرفة في \fI\fP: .TP \fBAT_EMPTY_PATH\fP (منذ لينكس 5.8) إذا كان \fIpath\fP سلسلة فارغة، فسيُعمل على الملف الذي يشير إليه \fIdirfd\fP (والذي ربما تم الحصول عليه باستخدام الراية \fBO_PATH\fP في \fBopen\fP(2)). في هذه الحالة، يمكن لـ \fIdirfd\fP أن يشير إلى أي نوع من الملفات، وليس فقط المجلدات. وإذا كان \fIdirfd\fP هو \fBAT_FDCWD\fP، فسيُنادى على مجلد العمل الحالي. هذه الراية خاصة بلينكس؛ عرّف \fB_GNU_SOURCE\fP للحصول على تعريفها. .TP \fBAT_SYMLINK_NOFOLLOW\fP إذا حدد \fIpath\fP رابطًا رمزيًا، فحدّث أختام الوقت للرابط، بدلاً من الملف الذي يشير إليه. .SH "قيمة الإرجاع" عند النجاح، تُرجع \fButimensat\fP() و\fBfutimens\fP() 0. عند الخطأ، يُرجع \-1 ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEACCES\fP .\" But Linux 2.6.22 was broken here. .\" Traditionally, utime()/utimes() gives the error EACCES for the case .\" where the timestamp pointer argument is NULL (i.e., set both timestamps .\" to the current time), and the file is owned by a user other than the .\" effective UID of the caller, and the file is not writable by the .\" effective UID of the program. utimensat() also gives this error in the .\" same case. However, in the same circumstances, when utimensat() is .\" given a 'times' array in which both tv_nsec fields are UTIME_NOW, which .\" provides equivalent functionality to specifying 'times' as NULL, the .\" call succeeds. It should fail with the error EACCES in this case. .\" .\" POSIX.1-2008 has the following: .\" .TP .\" .B EACCES .\" .RB ( utimensat ()) .\" .I fd .\" was not opened with .\" .B O_SEARCH .\" and the permissions of the directory to which .\" .I fd .\" refers do not allow searches. .\" EXT2_IMMUTABLE_FL and similar flags for other filesystems. \fItimes\fP هو NULL، أو كلا قيمتي \fItv_nsec\fP هما \fBUTIME_NOW\fP، ولا يتطابق معرف المستخدم الفعّال للمستدعي مع مالك الملف، وليس لدى المستدعي صلاحية الكتابة إلى الملف، والمستدعي ليس مميزًا (لينكس: ليس لديه إما القدرة \fBCAP_FOWNER\fP أو \fBCAP_DAC_OVERRIDE\fP). .TP \fBEBADF\fP (\fBfutimens\fP()) \fIfd\fP ليس واصف ملف صالحًا. .TP \fBEBADF\fP (\fButimensat\fP()) \fIpath\fP نسبي ولكن \fIdirfd\fP ليس \fBAT_FDCWD\fP ولا واصف ملف صالحًا. .TP \fBEFAULT\fP أشار \fItimes\fP إلى عنوان غير صالح؛ أو، كان \fIdirfd\fP \fBAT_FDCWD\fP، و \fIpath\fP هو NULL أو عنوان غير صالح. .TP \fBEINVAL\fP قيمة غير صالحة في \fIflags\fP. .TP \fBEINVAL\fP قيمة غير صالحة في أحد حقلي \fItv_nsec\fP (قيمة خارج النطاق [0, 999,999,999]، وليست \fBUTIME_NOW\fP أو \fBUTIME_OMIT\fP)؛ أو قيمة غير صالحة في أحد حقلي \fItv_sec\fP. .TP \fBEINVAL\fP .\" SUSv4 does not specify this error. \fIpath\fP هو NULL، و \fIdirfd\fP ليس \fBAT_FDCWD\fP، و \fIflags\fP يحتوي على \fBAT_SYMLINK_NOFOLLOW\fP. .TP \fBELOOP\fP (\fButimensat\fP()) تمت مصادفة عدد كبير جدًا من الروابط الرمزية أثناء حل \fIpath\fP. .TP \fBENAMETOOLONG\fP (\fButimensat\fP()) \fIpath\fP طويل جدًا. .TP \fBENOENT\fP (\fButimensat\fP()) أحد مكونات \fIpath\fP لا يشير إلى دليل أو ملف موجود، أو \fIpath\fP هو سلسلة فارغة. .TP \fBENOTDIR\fP (\fButimensat\fP()) \fIpath\fP نسبي، لكن \fIdirfd\fP ليس \fBAT_FDCWD\fP ولا واصف ملف يشير إلى دليل؛ أو، أحد مكونات البادئة لـ \fIpath\fP ليس دليلاً. .TP \fBEPERM\fP حاول المتصل تغيير طابع زمني واحد أو كليهما إلى قيمة غير الوقت الحالي، أو تغيير أحد الطوابع الزمنية إلى الوقت الحالي مع ترك الطابع الزمني الآخر دون تغيير، (أي \fItimes\fP ليس NULL، ولا حقل \fItv_nsec\fP هو \fBUTIME_NOW\fP، ولا حقل \fItv_nsec\fP هو \fBUTIME_OMIT\fP) وأيضًا: .RS .IP \[bu] 3 معرف المستخدم الفعّال للمتصل لا يتطابق مع مالك الملف، والمتصل ليس له صلاحية (لينكس: لا يملك إمكانية \fBCAP_FOWNER\fP)؛ أو، .IP \[bu] .\" Linux 2.6.22 was broken here: .\" it was not consistent with the old utimes() implementation, .\" since the case when both tv_nsec fields are UTIME_NOW, was not .\" treated like the (times == NULL) case. .\" EXT2_IMMUTABLE_FL EXT_APPEND_FL and similar flags for .\" other filesystems. .\" .\" Why the inconsistency (which is described under NOTES) between .\" EACCES and EPERM, where only EPERM tests for append-only. .\" (This was also so for the older utimes() implementation.) الملف مُعلّم كملحق فقط أو غير قابل للتغيير (انظر \fBchattr\fP(1)). .RE .TP \fBEROFS\fP الملف موجود في نظام ملفات للقراءة فقط. .TP \fBESRCH\fP (\fButimensat\fP()) تم رفض إذن البحث لأحد مكونات البادئة لـ \fIpath\fP. .SH السمات للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. الواجهة السمة القيمة T{ .na .nh \fButimensat\fP(), \fBfutimens\fP() T} سلامة الخيوط MT\-Safe .TE .SH الإصدارات .SS "اختلافات ABI بين مكتبة C والنواة" في لينكس، \fBfutimens\fP() هي دالة مكتبة مطبقة فوق استدعاء النظام \fButimensat\fP(). لدعم هذا، يطبق استدعاء النظام \fButimensat\fP() في لينكس ميزة غير قياسية: إذا كان \fIpath\fP هو NULL، فإن الاستدعاء يعدل الطوابع الزمنية للملف المشار إليه بواسطة واصف الملف \fIdirfd\fP (الذي قد يشير إلى أي نوع من الملفات). باستخدام هذه الميزة، يتم تنفيذ الاستدعاء \fIfutimens(fd,\ times)\fP كالتالي: .P .in +4n .EX utimensat(fd, NULL, times, 0); .EE .in .P لاحظ، مع ذلك، أن غلاف glibc لـ \fButimensat\fP() يمنع تمرير NULL كقيمة لـ \fIpath\fP: دالة الغلاف ترجع الخطأ \fBEINVAL\fP في هذه الحالة. .SH المعايير POSIX.1\-2024. .SH التاريخ .TP \fButimensat\fP() لينكس 2.6.22، glibc 2.6. POSIX.1\-2008. .TP \fBfutimens\fP() glibc 2.6. POSIX.1\-2008. .SH ملاحظات \fButimensat\fP() يلغي \fBfutimesat\fP(2). .P في لينكس، لا يمكن تغيير الطوابع الزمنية لملف مُعلّم كغير قابل للتغيير، والتغيير الوحيد المسموح به للملفات المُعلّمة كملحق فقط هو تعيين الطوابع الزمنية إلى الوقت الحالي. (هذا متسق مع السلوك التاريخي لـ \fButime\fP(2) و \fButimes\fP(2) على لينكس.) .P إذا تم تحديد كلا حقلي \fItv_nsec\fP كـ \fBUTIME_OMIT\fP، فإن تنفيذ لينكس لـ \fButimensat\fP() ينجح حتى لو كان الملف المشار إليه بواسطة \fIdirfd\fP و \fIpath\fP غير موجود. .SH العلل تعاني \fButimensat\fP() و \fBfutimens\fP() من عدة أخطاء قبل لينكس 2.6.26. هذه الأخطاء إما عدم امتثال لمواصفات مسودة POSIX.1 أو عدم تناسق مع سلوك لينكس التاريخي. .IP \[bu] 3 يحدد POSIX.1 أنه إذا كان أحد حقول \fItv_nsec\fP له القيمة \fBUTIME_NOW\fP أو \fBUTIME_OMIT\fP، فيجب تجاهل قيمة حقل \fItv_sec\fP المقابل. بدلاً من ذلك، يُطلب أن تكون قيمة حقل \fItv_sec\fP 0 (أو ينتج الخطأ \fBEINVAL\fP). .IP \[bu] .\" Below, the long description of the errors from the previous bullet .\" point (abridged because it's too much detail for a man page). .\" .IP \[bu] .\" If one of the .\" .I tv_nsec .\" fields is .\" .BR UTIME_OMIT .\" and the other is .\" .BR UTIME_NOW , .\" then the error .\" .B EPERM .\" should occur if the process's effective user ID does not match .\" the file owner and the process is not privileged. .\" Instead, the call successfully changes one of the timestamps. .\" .IP \[bu] .\" If file is not writable by the effective user ID of the process and .\" the process's effective user ID does not match the file owner and .\" the process is not privileged, .\" and .\" .I times .\" is NULL, then the error .\" .B EACCES .\" results. .\" This error should also occur if .\" .I times .\" points to an array of structures in which both .\" .I tv_nsec .\" fields are .\" .BR UTIME_NOW . .\" Instead the call succeeds. .\" .IP \[bu] .\" If a file is marked as append-only (see .\" .BR chattr (1)), .\" then Linux traditionally .\" (i.e., .\" .BR utime (2), .\" .BR utimes (2)), .\" permits a NULL .\" .I times .\" argument to be used in order to update both timestamps to the current time. .\" For consistency, .\" .BR utimensat () .\" and .\" .BR futimens () .\" should also produce the same result when given a .\" .I times .\" argument that points to an array of structures in which both .\" .I tv_nsec .\" fields are .\" .BR UTIME_NOW . .\" Instead, the call fails with the error .\" .BR EPERM . .\" .IP \[bu] .\" If a file is marked as immutable (see .\" .BR chattr (1)), .\" then Linux traditionally .\" (i.e., .\" .BR utime (2), .\" .BR utimes (2)), .\" gives an .\" .B EACCES .\" error if .\" .I times .\" is NULL. .\" For consistency, .\" .BR utimensat () .\" and .\" .BR futimens () .\" should also produce the same result when given a .\" .I times .\" that points to an array of structures in which both .\" .I tv_nsec .\" fields are .\" .BR UTIME_NOW . .\" Instead, the call fails with the error .\" .BR EPERM . تعني الأخطاء المختلفة أنه لأغراض التحقق من الإذن، لا يتم دائمًا معالجة الحالة التي يتم فيها تعيين كلا حقلي \fItv_nsec\fP إلى \fBUTIME_NOW\fP بنفس طريقة تحديد \fItimes\fP كـ NULL، والحالة التي تكون فيها قيمة \fItv_nsec\fP واحدة \fBUTIME_NOW\fP والأخرى \fBUTIME_OMIT\fP لا يتم معالجتها بنفس طريقة تحديد \fItimes\fP كمؤشر إلى مصفوفة من الهياكل التي تحتوي على قيم زمنية عشوائية. نتيجة لذلك، في بعض الحالات: أ) يمكن تحديث الطوابع الزمنية للملف بواسطة عملية لا ينبغي أن يكون لها إذن لإجراء التحديثات؛ ب) لا يمكن تحديث الطوابع الزمنية للملف بواسطة عملية يجب أن يكون لها إذن لإجراء التحديثات؛ و ج) يتم إرجاع قيمة \fIerrno\fP خاطئة في حالة حدوث خطأ. .IP \[bu] .\" This means that a process with a file descriptor that allows .\" writing could change the timestamps of a file for which it .\" does not have write permission; .\" conversely, a process with a read-only file descriptor won't .\" be able to update the timestamps of a file, .\" even if it has write permission on the file. يقول POSIX.1 أن العملية التي لديها \fIإذن كتابة إلى الملف\fP يمكنها إجراء استدعاء مع \fItimes\fP كـ NULL، أو مع \fItimes\fP يشير إلى مصفوفة من الهياكل التي يكون فيها كلا حقلي \fItv_nsec\fP \fBUTIME_NOW\fP، من أجل تحديث كلا الطابعين الزمنيين إلى الوقت الحالي. ومع ذلك، \fBfutimens\fP() بدلاً من ذلك يتحقق مما إذا كان \fIوضع الوصول لواصف الملف يسمح بالكتابة\fP. .SH "انظر أيضًا" \fBchattr\fP(1), \fBtouch\fP(1), \fBfutimesat\fP(2), \fBopenat\fP(2), \fBstat\fP(2), \fButimes\fP(2), \fBfutimes\fP(3), \fBtimespec\fP(3), \fBinode\fP(7), \fBpath_resolution\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 .