File Events

FileWatching.poll_fdFunction
poll_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.

source
FileWatching.poll_fileFunction
poll_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.

source
FileWatching.watch_fileFunction
watch_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.

source
FileWatching.watch_folderFunction
watch_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.

source
FileWatching.unwatch_folderFunction
unwatch_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.

source

Pidfile

Un outil utilitaire simple pour créer des fichiers pid d'avis (fichiers de verrouillage).

Primary Functions

FileWatching.Pidfile.mkpidlockFunction
mkpidlock([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 (si watch_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 si refresh 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é sur stale_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.
source
FileWatching.Pidfile.trymkpidlockFunction
trymkpidlock([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é.

Julia 1.10

Cette fonction nécessite au moins Julia 1.10.

source
Base.closeMethod
close(lock::LockMonitor)

Libérez un verrou de fichier pid.

source

Helper Functions

FileWatching.Pidfile.open_exclusiveFunction
open_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.

source
FileWatching.Pidfile.tryopen_exclusiveFunction
tryopen_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à.

source
FileWatching.Pidfile.parse_pidfileFunction
parse_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é.

source
FileWatching.Pidfile.stale_pidfileFunction
stale_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.

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

Tentative d'estimer de manière conservatrice si pid est un identifiant de processus valide.

source
Base.Filesystem.touchMethod
Base.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.

source