File Events
FileWatching.poll_fd
— Functionpoll_fd(fd, timeout_s::Real=-1; readable=false, writable=false)
Surveille un descripteur de fichier fd
pour des changements dans la disponibilité de lecture ou d'écriture, avec un délai donné par timeout_s
secondes.
Les arguments de mot-clé déterminent quel statut de lecture et/ou d'écriture doit être surveillé ; au moins l'un d'eux doit être défini sur true
.
La valeur retournée est un objet avec des champs booléens readable
, writable
et timedout
, donnant le résultat du sondage.
FileWatching.poll_file
— Functionpoll_file(path::AbstractString, interval_s::Real=5.007, timeout_s::Real=-1) -> (previous::StatStruct, current)
Surveillez un fichier pour détecter des changements en interrogeant toutes les interval_s
secondes jusqu'à ce qu'un changement se produise ou que timeout_s
secondes se soient écoulées. L'interval_s
doit être une longue période ; la valeur par défaut est de 5.007 secondes.
Renvoie une paire d'objets d'état (previous, current)
lorsqu'un changement est détecté. L'état previous
est toujours un StatStruct
, mais il peut avoir tous les champs à zéro (indiquant que le fichier n'existait pas auparavant ou n'était pas accessible auparavant).
L'objet d'état current
peut être un StatStruct
, une EOFError
(indiquant que le délai a expiré), ou un autre sous-type d'Exception
(si l'opération stat
a échoué - par exemple, si le chemin n'existe pas).
Pour déterminer quand un fichier a été modifié, comparez current isa StatStruct && mtime(prev) != mtime(current)
pour détecter la notification de changements. Cependant, l'utilisation de watch_file
pour cette opération est préférable, car elle est plus fiable et efficace, bien que dans certaines situations, elle puisse ne pas être disponible.
FileWatching.watch_file
— Functionwatch_file(path::AbstractString, timeout_s::Real=-1)
Surveillez le fichier ou le répertoire path
pour des changements jusqu'à ce qu'un changement se produise ou que timeout_s
secondes se soient écoulées. Cette fonction ne scrute pas le système de fichiers et utilise plutôt des fonctionnalités spécifiques à la plateforme pour recevoir des notifications du système d'exploitation (par exemple, via inotify sur Linux). Consultez la documentation NodeJS liée ci-dessous pour plus de détails.
La valeur retournée est un objet avec des champs booléens renamed
, changed
et timedout
, donnant le résultat de la surveillance du fichier.
Ce comportement de cette fonction varie légèrement selon les plateformes. Voir https://nodejs.org/api/fs.html#fs_caveats pour des informations plus détaillées.
FileWatching.watch_folder
— Functionwatch_folder(path::AbstractString, timeout_s::Real=-1)
Surveille un fichier ou un répertoire path
pour des changements jusqu'à ce qu'un changement se soit produit ou que timeout_s
secondes se soient écoulées. Cette fonction ne scrute pas le système de fichiers et utilise plutôt des fonctionnalités spécifiques à la plateforme pour recevoir des notifications du système d'exploitation (par exemple, via inotify sur Linux). Voir la documentation NodeJS liée ci-dessous pour plus de détails.
Cela continuera à suivre les changements pour path
en arrière-plan jusqu'à ce que unwatch_folder
soit appelé sur le même path
.
La valeur retournée est une paire où le premier champ est le nom du fichier modifié (si disponible) et le deuxième champ est un objet avec des champs booléens renamed
, changed
et timedout
, indiquant l'événement.
Ce comportement de cette fonction varie légèrement selon les plateformes. Voir https://nodejs.org/api/fs.html#fs_caveats pour des informations plus détaillées.
FileWatching.unwatch_folder
— Functionunwatch_folder(path::AbstractString)
Arrêtez le suivi en arrière-plan des modifications pour path
. Il n'est pas recommandé de faire cela pendant qu'une autre tâche attend que watch_folder
retourne sur le même chemin, car le résultat peut être imprévisible.
Pidfile
Un outil utilitaire simple pour créer des fichiers pid d'avis (fichiers de verrouillage).
Primary Functions
FileWatching.Pidfile.mkpidlock
— Functionmkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
mkpidlock(at::String, proc::Process; kwopts...)
Créez un verrou de fichier pid pour le chemin "at" pour le processus actuel ou le processus identifié par pid ou proc. Peut prendre une fonction à exécuter une fois verrouillé, pour une utilisation dans des blocs do
, après quoi le verrou sera automatiquement fermé. Si le verrou échoue et que wait
est faux, une erreur est levée.
Le verrou sera libéré soit par close
, un finalizer
, ou peu après la sortie de proc
. Assurez-vous que la valeur de retour reste vivante jusqu'à la fin de la section critique de votre programme, afin que le finalizer
ne la récupère pas trop tôt.
Arguments optionnels :
mode
: mode d'accès au fichier (modifié par le umask du processus). Par défaut, il est lisible par tous.poll_interval
: Spécifiez le temps maximum entre les tentatives (siwatch_file
ne fonctionne pas)stale_age
: Supprimez un fichier pid existant (en ignorant le verrou) s'il est plus ancien que ce nombre de secondes, basé sur son mtime. Le fichier ne sera pas supprimé tant que 5 fois plus longtemps que cela si le pid dans le fichier semble valide. Ou 25 fois plus longtemps sirefresh
est remplacé par 0 pour désactiver le rafraîchissement du verrou. Par défaut, cela est désactivé (stale_age
= 0), mais une valeur typiquement recommandée serait d'environ 3-5 fois un temps d'achèvement normal estimé.refresh
: Empêche un verrou de devenir obsolète en mettant à jour le mtime à chaque intervalle de temps qui passe. Par défaut, cela est réglé surstale_age/2
, qui est la valeur recommandée.wait
: Si vrai, bloque jusqu'à ce que nous obtenions le verrou, si faux, lève une erreur si le verrou échoue.
FileWatching.Pidfile.trymkpidlock
— Functiontrymkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
trymkpidlock(at::String, proc::Process; kwopts...)
Comme mkpidlock
sauf qu'il retourne false
au lieu d'attendre si le fichier est déjà verrouillé.
Cette fonction nécessite au moins Julia 1.10.
Base.close
— Methodclose(lock::LockMonitor)
Libérez un verrou de fichier pid.
Helper Functions
FileWatching.Pidfile.open_exclusive
— Functionopen_exclusive(path::String; mode, poll_interval, wait, stale_age, refresh) :: File
Créez un nouveau fichier pour un accès exclusif en lecture-écriture. Si wait
est false
, alors une erreur se produira si les fichiers de verrouillage existent, sinon, bloquez jusqu'à ce que nous obtenions le verrou.
Pour une description des arguments de mot-clé, voir mkpidlock
.
FileWatching.Pidfile.tryopen_exclusive
— Functiontryopen_exclusive(path::String, mode::Integer = 0o444) :: Union{Void, File}
Essayez de créer un nouveau fichier pour un accès exclusif en lecture-écriture, ne renvoyez rien s'il existe déjà.
FileWatching.Pidfile.write_pidfile
— Functionwrite_pidfile(io, pid)
Écrire notre format de fichier pid dans un descripteur IO ouvert.
FileWatching.Pidfile.parse_pidfile
— Functionparse_pidfile(file::Union{IO, String}) => (pid, hostname, age)
Tentez de parser notre format de fichier pid, remplaçant un élément par (0, "", 0.0), respectivement, pour toute lecture qui a échoué.
FileWatching.Pidfile.stale_pidfile
— Functionstale_pidfile(path::String, stale_age::Real, refresh::Real) :: Bool
Fonction d'assistance pour open_exclusive
pour décider si un fichier pid est obsolète.
FileWatching.Pidfile.isvalidpid
— Functionisvalidpid(hostname::String, pid::Cuint) :: Bool
Tentative d'estimer de manière conservatrice si pid est un identifiant de processus valide.
Base.Filesystem.touch
— MethodBase.touch(::Pidfile.LockMonitor)
Met à jour le mtime
sur le verrou, pour indiquer qu'il est toujours frais.
Voir aussi le mot-clé refresh
dans le constructeur mkpidlock
.