File Events
FileWatching.poll_fd
— Functionpoll_fd(fd, timeout_s::Real=-1; readable=false, writable=false)
راقب موصل الملف fd
للتغييرات في توفر القراءة أو الكتابة، مع مهلة محددة بـ timeout_s
ثوانٍ.
تحدد الوسائط الرئيسية أي من حالة القراءة و/أو الكتابة يجب مراقبتها؛ يجب تعيين واحد على الأقل منها إلى true
.
القيمة المعادة هي كائن يحتوي على حقول بوليانية readable
و writable
و timedout
، مما يعطي نتيجة الاستطلاع.
FileWatching.poll_file
— Functionpoll_file(path::AbstractString, interval_s::Real=5.007, timeout_s::Real=-1) -> (previous::StatStruct, current)
راقب ملفًا للتغييرات عن طريق الاستطلاع كل interval_s
ثوانٍ حتى يحدث تغيير أو تنقضي timeout_s
ثوانٍ. يجب أن تكون interval_s
فترة طويلة؛ القيمة الافتراضية هي 5.007 ثوانٍ.
تُرجع زوجًا من كائنات الحالة (previous, current)
عند اكتشاف تغيير. حالة previous
هي دائمًا StatStruct
، ولكن قد تحتوي على جميع الحقول صفرية (مما يشير إلى أن الملف لم يكن موجودًا سابقًا، أو لم يكن متاحًا سابقًا).
قد تكون حالة current
كائنًا من نوع StatStruct
، أو EOFError
(مما يشير إلى أن المهلة قد انتهت)، أو نوعًا آخر من الاستثناءات الفرعية (إذا فشلت عملية stat
- على سبيل المثال، إذا كان المسار غير موجود).
لتحديد متى تم تعديل ملف، قارن current isa StatStruct && mtime(prev) != mtime(current)
لاكتشاف إشعار التغييرات. ومع ذلك، يُفضل استخدام watch_file
لهذه العملية، لأنها أكثر موثوقية وكفاءة، على الرغم من أنه في بعض الحالات قد لا تكون متاحة.
FileWatching.watch_file
— Functionwatch_file(path::AbstractString, timeout_s::Real=-1)
راقب الملف أو الدليل path
للتغييرات حتى يحدث تغيير أو تنقضي timeout_s
ثوانٍ. لا تقوم هذه الدالة بالاستطلاع على نظام الملفات، بل تستخدم وظائف محددة للمنصة لتلقي الإشعارات من نظام التشغيل (مثل inotify على لينكس). راجع وثائق NodeJS المرتبطة أدناه للحصول على التفاصيل.
القيمة المعادة هي كائن يحتوي على حقول منطقية renamed
و changed
و timedout
، مما يعطي نتيجة مراقبة الملف.
يختلف سلوك هذه الدالة قليلاً عبر المنصات. راجع https://nodejs.org/api/fs.html#fs_caveats للحصول على معلومات أكثر تفصيلاً.
FileWatching.watch_folder
— Functionwatch_folder(path::AbstractString, timeout_s::Real=-1)
يُراقب ملفًا أو دليلًا path
للتغييرات حتى يحدث تغيير أو تنقضي ثواني timeout_s
. لا تقوم هذه الدالة بالاستطلاع على نظام الملفات، بل تستخدم وظائف محددة للمنصة لتلقي الإشعارات من نظام التشغيل (مثل inotify على لينكس). راجع وثائق NodeJS المرتبطة أدناه للحصول على التفاصيل.
سيستمر هذا في تتبع التغييرات لـ path
في الخلفية حتى يتم استدعاء unwatch_folder
على نفس path
.
القيمة المعادة هي زوج حيث يكون الحقل الأول هو اسم الملف الذي تم تغييره (إذا كان متاحًا) والحقل الثاني هو كائن يحتوي على حقول منطقية renamed
و changed
و timedout
، مما يعطي الحدث.
يختلف سلوك هذه الدالة قليلاً عبر المنصات. راجع https://nodejs.org/api/fs.html#fs_caveats للحصول على معلومات أكثر تفصيلًا.
FileWatching.unwatch_folder
— Functionunwatch_folder(path::AbstractString)
توقف عن تتبع التغييرات في الخلفية لـ path
. لا يُنصح بالقيام بذلك بينما تنتظر مهمة أخرى أن تعود watch_folder
على نفس المسار، حيث قد تكون النتيجة غير متوقعة.
Pidfile
أداة بسيطة لإنشاء ملفات pid الاستشارية (ملفات القفل).
Primary Functions
FileWatching.Pidfile.mkpidlock
— Functionmkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
mkpidlock(at::String, proc::Process; kwopts...)
قم بإنشاء قفل pidfile للمسار "at" للعملية الحالية أو العملية المحددة بواسطة pid أو proc. يمكن أن تأخذ دالة للتنفيذ بمجرد القفل، للاستخدام في كتل do
، بعد ذلك سيتم إغلاق القفل تلقائيًا. إذا فشل القفل و wait
هو false، فسيتم طرح خطأ.
سيتم تحرير القفل إما بواسطة close
، أو finalizer
، أو بعد فترة وجيزة من خروج proc
. تأكد من أن القيمة المرجعة حية حتى نهاية القسم الحرج من برنامجك، حتى لا يستعيدها finalizer
مبكرًا.
وسائط اختيارية:
mode
: وضع الوصول إلى الملف (يتم تعديله بواسطة umask العملية). الافتراضي هو قابل للقراءة من قبل الجميع.poll_interval
: حدد الحد الأقصى للوقت بين المحاولات (إذا لم يعملwatch_file
)stale_age
: احذف ملف pid الموجود (متجاهلاً القفل) إذا كان أقدم من هذه الثواني، بناءً على mtime الخاص به. لن يتم حذف الملف حتى 5x أطول من هذا إذا بدا أن pid في الملف قد يكون صالحًا. أو 25x أطول إذا تم تجاوزrefresh
إلى 0 لتعطيل تحديث القفل. بشكل افتراضي، يتم تعطيل ذلك (stale_age
= 0)، ولكن القيمة الموصى بها النموذجية ستكون حوالي 3-5x من الوقت المقدر للاكتمال العادي.refresh
: يحافظ على القفل من أن يصبح قديمًا عن طريق تحديث mtime كل فترة زمنية تمر. بشكل افتراضي، يتم تعيين ذلك إلىstale_age/2
، وهو القيمة الموصى بها.wait
: إذا كان صحيحًا، احظر حتى نحصل على القفل، إذا كان خاطئًا، ارفع خطأ إذا فشل القفل.
FileWatching.Pidfile.trymkpidlock
— Functiontrymkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
trymkpidlock(at::String, proc::Process; kwopts...)
مثل mkpidlock
باستثناء أنه يُرجع false
بدلاً من الانتظار إذا كان الملف مؤمناً بالفعل.
تتطلب هذه الدالة على الأقل جوليا 1.10.
Base.close
— Methodclose(lock::LockMonitor)
افتح قفل ملف pid.
Helper Functions
FileWatching.Pidfile.open_exclusive
— Functionopen_exclusive(path::String; mode, poll_interval, wait, stale_age, refresh) :: File
إنشاء ملف جديد للوصول الحصري للقراءة والكتابة. إذا كان wait
هو false
، فسيتم إظهار خطأ إذا كانت ملفات القفل موجودة، وإلا سيتم حظر العملية حتى نحصل على القفل.
للحصول على وصف لوسائط الكلمات الرئيسية، انظر mkpidlock
.
FileWatching.Pidfile.tryopen_exclusive
— Functiontryopen_exclusive(path::String, mode::Integer = 0o444) :: Union{Void, File}
حاول إنشاء ملف جديد للوصول الحصري للقراءة والكتابة، ارجع لا شيء إذا كان موجودًا بالفعل.
FileWatching.Pidfile.write_pidfile
— Functionwrite_pidfile(io, pid)
اكتب تنسيق ملف pid الخاص بنا إلى موصِّل IO مفتوح.
FileWatching.Pidfile.parse_pidfile
— Functionparse_pidfile(file::Union{IO, String}) => (pid, hostname, age)
حاول تحليل تنسيق ملف pidfile الخاص بنا، واستبدل عنصرًا بـ (0، ""، 0.0) على التوالي، لأي قراءة فشلت.
FileWatching.Pidfile.stale_pidfile
— Functionstale_pidfile(path::String, stale_age::Real, refresh::Real) :: Bool
دالة مساعدة لـ open_exclusive
لتحديد ما إذا كان ملف pid قديمًا.
FileWatching.Pidfile.isvalidpid
— Functionisvalidpid(hostname::String, pid::Cuint) :: Bool
محاولة تقدير بحذر ما إذا كان pid هو معرف عملية صالح.
Base.Filesystem.touch
— MethodBase.touch(::Pidfile.LockMonitor)
قم بتحديث mtime
على القفل، للإشارة إلى أنه لا يزال جديدًا.
انظر أيضًا إلى الكلمة الرئيسية refresh
في منشئ mkpidlock
.