File Events

FileWatching.poll_fdFunction
poll_fd(fd, timeout_s::Real=-1; readable=false, writable=false)

راقب موصل الملف fd للتغييرات في توفر القراءة أو الكتابة، مع مهلة محددة بـ timeout_s ثوانٍ.

تحدد الوسائط الرئيسية أي من حالة القراءة و/أو الكتابة يجب مراقبتها؛ يجب تعيين واحد على الأقل منها إلى true.

القيمة المعادة هي كائن يحتوي على حقول بوليانية readable و writable و timedout، مما يعطي نتيجة الاستطلاع.

source
FileWatching.poll_fileFunction
poll_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 لهذه العملية، لأنها أكثر موثوقية وكفاءة، على الرغم من أنه في بعض الحالات قد لا تكون متاحة.

source
FileWatching.watch_fileFunction
watch_file(path::AbstractString, timeout_s::Real=-1)

راقب الملف أو الدليل path للتغييرات حتى يحدث تغيير أو تنقضي timeout_s ثوانٍ. لا تقوم هذه الدالة بالاستطلاع على نظام الملفات، بل تستخدم وظائف محددة للمنصة لتلقي الإشعارات من نظام التشغيل (مثل inotify على لينكس). راجع وثائق NodeJS المرتبطة أدناه للحصول على التفاصيل.

القيمة المعادة هي كائن يحتوي على حقول منطقية renamed و changed و timedout، مما يعطي نتيجة مراقبة الملف.

يختلف سلوك هذه الدالة قليلاً عبر المنصات. راجع https://nodejs.org/api/fs.html#fs_caveats للحصول على معلومات أكثر تفصيلاً.

source
FileWatching.watch_folderFunction
watch_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 للحصول على معلومات أكثر تفصيلًا.

source
FileWatching.unwatch_folderFunction
unwatch_folder(path::AbstractString)

توقف عن تتبع التغييرات في الخلفية لـ path. لا يُنصح بالقيام بذلك بينما تنتظر مهمة أخرى أن تعود watch_folder على نفس المسار، حيث قد تكون النتيجة غير متوقعة.

source

Pidfile

أداة بسيطة لإنشاء ملفات pid الاستشارية (ملفات القفل).

Primary Functions

FileWatching.Pidfile.mkpidlockFunction
mkpidlock([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: إذا كان صحيحًا، احظر حتى نحصل على القفل، إذا كان خاطئًا، ارفع خطأ إذا فشل القفل.
source
FileWatching.Pidfile.trymkpidlockFunction
trymkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
trymkpidlock(at::String, proc::Process; kwopts...)

مثل mkpidlock باستثناء أنه يُرجع false بدلاً من الانتظار إذا كان الملف مؤمناً بالفعل.

جوليا 1.10

تتطلب هذه الدالة على الأقل جوليا 1.10.

source

Helper Functions

FileWatching.Pidfile.open_exclusiveFunction
open_exclusive(path::String; mode, poll_interval, wait, stale_age, refresh) :: File

إنشاء ملف جديد للوصول الحصري للقراءة والكتابة. إذا كان wait هو false، فسيتم إظهار خطأ إذا كانت ملفات القفل موجودة، وإلا سيتم حظر العملية حتى نحصل على القفل.

للحصول على وصف لوسائط الكلمات الرئيسية، انظر mkpidlock.

source
FileWatching.Pidfile.tryopen_exclusiveFunction
tryopen_exclusive(path::String, mode::Integer = 0o444) :: Union{Void, File}

حاول إنشاء ملف جديد للوصول الحصري للقراءة والكتابة، ارجع لا شيء إذا كان موجودًا بالفعل.

source
FileWatching.Pidfile.parse_pidfileFunction
parse_pidfile(file::Union{IO, String}) => (pid, hostname, age)

حاول تحليل تنسيق ملف pidfile الخاص بنا، واستبدل عنصرًا بـ (0، ""، 0.0) على التوالي، لأي قراءة فشلت.

source
FileWatching.Pidfile.stale_pidfileFunction
stale_pidfile(path::String, stale_age::Real, refresh::Real) :: Bool

دالة مساعدة لـ open_exclusive لتحديد ما إذا كان ملف pid قديمًا.

source
FileWatching.Pidfile.isvalidpidFunction
isvalidpid(hostname::String, pid::Cuint) :: Bool

محاولة تقدير بحذر ما إذا كان pid هو معرف عملية صالح.

source
Base.Filesystem.touchMethod
Base.touch(::Pidfile.LockMonitor)

قم بتحديث mtime على القفل، للإشارة إلى أنه لا يزال جديدًا.

انظر أيضًا إلى الكلمة الرئيسية refresh في منشئ mkpidlock.

source