File Events

FileWatching.poll_fdFunction
poll_fd(fd, timeout_s::Gerçek=-1; okunabilir=false, yazılabilir=false)

Bir dosya tanımlayıcısını fd okuma veya yazma uygunluğundaki değişiklikler için izleyin ve timeout_s saniye cinsinden verilen bir zaman aşımı ile.

Anahtar kelime argümanları, hangi okuma ve/veya yazma durumunun izleneceğini belirler; bunlardan en az biri true olarak ayarlanmalıdır.

Dönen değer, anketin sonucunu veren okunabilir, yazılabilir ve zaman aşımına uğramış boolean alanlarına sahip bir nesnedir.

source
FileWatching.poll_fileFunction
poll_file(path::AbstractString, interval_s::Real=5.007, timeout_s::Real=-1) -> (previous::StatStruct, current)

Bir dosyayı, bir değişiklik meydana gelene kadar veya timeout_s saniye geçene kadar her interval_s saniyede bir kontrol ederek izleyin. interval_s uzun bir süre olmalıdır; varsayılan değer 5.007 saniyedir.

Bir değişiklik tespit edildiğinde, durum nesnelerinin bir çiftini (previous, current) döndürür. previous durumu her zaman bir StatStruct'tur, ancak tüm alanları sıfırlanmış olabilir (bu, dosyanın daha önce mevcut olmadığını veya daha önce erişilebilir olmadığını gösterir).

current durum nesnesi bir StatStruct, bir EOFError (zaman aşımının dolduğunu gösterir) veya stat işleminin başarısız olması durumunda başka bir Exception alt türü olabilir (örneğin, yol mevcut değilse).

Bir dosyanın ne zaman değiştirildiğini belirlemek için current isa StatStruct && mtime(prev) != mtime(current) karşılaştırmasını kullanarak değişiklik bildirimini tespit edin. Ancak, bu işlem için watch_file kullanılması tercih edilir, çünkü daha güvenilir ve etkilidir, ancak bazı durumlarda mevcut olmayabilir.

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

path dosyasını veya dizinini değişiklikler için izleyin, bir değişiklik meydana gelene kadar veya timeout_s saniyesi dolana kadar. Bu fonksiyon dosya sistemini sorgulamaz ve bunun yerine işletim sisteminden (örneğin, Linux'ta inotify aracılığıyla) bildirim almak için platforma özgü işlevsellik kullanır. Aşağıda bağlantılı NodeJS belgelerine detaylar için bakın.

Dönen değer, dosyayı izleme sonucunu veren renamed, changed ve timedout boolean alanlarına sahip bir nesnedir.

Bu fonksiyonun davranışı platformlar arasında biraz farklılık gösterir. Daha ayrıntılı bilgi için https://nodejs.org/api/fs.html#fs_caveats adresine bakın.

source
FileWatching.watch_folderFunction
watch_folder(path::AbstractString, timeout_s::Real=-1)

Bir dosya veya dizin path'te değişiklikleri izler ve bir değişiklik meydana gelene kadar veya timeout_s saniye geçene kadar devam eder. Bu fonksiyon dosya sistemini sorgulamaz ve bunun yerine işletim sisteminden (örneğin, Linux'ta inotify aracılığıyla) bildirim almak için platforma özgü işlevsellik kullanır. Ayrıntılar için aşağıda bağlantısı verilen NodeJS belgelerine bakın.

Bu, unwatch_folder aynı path üzerinde çağrılana kadar arka planda path için değişiklikleri izlemeye devam edecektir.

Dönen değer, ilk alanı değiştirilen dosyanın adı (varsa) ve ikinci alanı olayları belirten renamed, changed ve timedout boolean alanlarına sahip bir nesne olan bir çift olacaktır.

Bu fonksiyonun davranışı platformlar arasında biraz farklılık gösterir. Daha ayrıntılı bilgi için https://nodejs.org/api/fs.html#fs_caveats adresine bakın.

source
FileWatching.unwatch_folderFunction
unwatch_folder(path::AbstractString)

path için değişikliklerin arka planda izlenmesini durdurur. Aynı path üzerinde watch_folder'ın dönmesini bekleyen başka bir görev varken bunu yapmanız önerilmez, çünkü sonuç öngörülemez olabilir.

source

Pidfile

Basit bir yardımcı araç, danışmanlık pid dosyaları (kilit dosyaları) oluşturmak için.

Primary Functions

FileWatching.Pidfile.mkpidlockFunction
mkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
mkpidlock(at::String, proc::Process; kwopts...)

Mevcut işlem veya pid veya proc ile tanımlanan işlem için "at" yolunda bir pidfile kilidi oluşturur. Kilit açıldığında çalıştırılacak bir işlev alabilir, bu da do bloklarında kullanım için geçerlidir; ardından kilit otomatik olarak kapatılacaktır. Kilit başarısız olursa ve wait false ise, bir hata fırlatılır.

Kilit, ya close, bir finalizer veya proc çıkış yaptıktan kısa bir süre sonra serbest bırakılacaktır. Dönüş değerinin programınızın kritik bölümünün sonuna kadar canlı olduğundan emin olun, böylece finalizer onu erken geri almaz.

İsteğe bağlı anahtar argümanlar:

  • mode: dosya erişim modu (işlem umask'ı tarafından değiştirilir). Varsayılan olarak dünya tarafından okunabilir.
  • poll_interval: Denemeler arasındaki maksimum süreyi belirtin (eğer watch_file çalışmazsa)
  • stale_age: Mevcut bir pidfile'ı (kilidi göz ardı ederek) bu kadar saniye daha eskiyse silin. Dosya, dosyadaki pid geçerli görünüyor gibi görünüyorsa, bu süreden 5 kat daha uzun süre silinmeyecektir. Veya refresh 0 olarak geçersiz kılınırsa kilit yenilemesi devre dışı bırakılırsa 25 kat daha uzun süre. Varsayılan olarak bu devre dışı bırakılmıştır (stale_age = 0), ancak tipik olarak önerilen bir değer, tahmini normal tamamlama süresinin yaklaşık 3-5 katı olacaktır.
  • refresh: Kilidin bayatlamasını önlemek için geçen her zaman aralığında mtime'ı güncelleyerek. Varsayılan olarak, bu stale_age/2 olarak ayarlanmıştır, bu da önerilen değerdir.
  • wait: Eğer true ise, kilidi alana kadar engelle, false ise, kilit başarısız olursa hata fırlat.
source
FileWatching.Pidfile.trymkpidlockFunction
trymkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
trymkpidlock(at::String, proc::Process; kwopts...)

mkpidlock gibi, ancak dosya zaten kilitlenmişse beklemek yerine false döner.

Julia 1.10

Bu fonksiyon en az Julia 1.10 gerektirir.

source
Base.closeMethod
close(lock::LockMonitor)

Bir pidfile kilidini serbest bırakır.

source

Helper Functions

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

Okuma yazma tavsiye edici özel erişim için yeni bir dosya oluşturur. Eğer wait false ise, kilit dosyaları mevcutsa hata verir, aksi takdirde kilidi alana kadar engeller.

Anahtar argümanların açıklaması için mkpidlock kısmına bakın.

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

Okuma okuma yazma tavsiye edici özel erişim için yeni bir dosya oluşturmaya çalışın, eğer zaten mevcutsa hiçbir şey döndürmeyin.

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

Pid dosyamızın formatını ayrıştırmayı deneyin, başarısız olan her okuma için sırasıyla (0, "", 0.0) ile bir öğeyi değiştirdik.

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

pidfile'ın eski olup olmadığını belirlemek için open_exclusive için yardımcı fonksiyon.

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

pid'nin geçerli bir işlem kimliği olup olmadığını ihtiyatlı bir şekilde tahmin etmeye çalışır.

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

Kilidi güncel tutmak için mtime değerini günceller.

Ayrıca mkpidlock yapıcısındaki refresh anahtar kelimesine de bakın.

source