File Events
FileWatching.poll_fd
— Functionpoll_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.
FileWatching.poll_file
— Functionpoll_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.
FileWatching.watch_file
— Functionwatch_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.
FileWatching.watch_folder
— Functionwatch_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.
FileWatching.unwatch_folder
— Functionunwatch_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.
Pidfile
Basit bir yardımcı araç, danışmanlık pid dosyaları (kilit dosyaları) oluşturmak için.
Primary Functions
FileWatching.Pidfile.mkpidlock
— Functionmkpidlock([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ğerwatch_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. Veyarefresh
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, bustale_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.
FileWatching.Pidfile.trymkpidlock
— Functiontrymkpidlock([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.
Bu fonksiyon en az Julia 1.10 gerektirir.
Base.close
— Methodclose(lock::LockMonitor)
Bir pidfile kilidini serbest bırakır.
Helper Functions
FileWatching.Pidfile.open_exclusive
— Functionopen_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.
FileWatching.Pidfile.tryopen_exclusive
— Functiontryopen_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.
FileWatching.Pidfile.write_pidfile
— Functionwrite_pidfile(io, pid)
Açık bir IO tanımlayıcısına pidfile formatımızı yazın.
FileWatching.Pidfile.parse_pidfile
— Functionparse_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.
FileWatching.Pidfile.stale_pidfile
— Functionstale_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.
FileWatching.Pidfile.isvalidpid
— Functionisvalidpid(hostname::String, pid::Cuint) :: Bool
pid'nin geçerli bir işlem kimliği olup olmadığını ihtiyatlı bir şekilde tahmin etmeye çalışır.
Base.Filesystem.touch
— MethodBase.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.