File Events

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

Monitorea un descriptor de archivo fd para cambios en la disponibilidad de lectura o escritura, y con un tiempo de espera dado por timeout_s segundos.

Los argumentos de palabra clave determinan cuál de los estados de lectura y/o escritura debe ser monitoreado; al menos uno de ellos debe estar configurado en true.

El valor devuelto es un objeto con campos booleanos readable, writable y timedout, que dan el resultado de la encuesta.

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

Monitorea un archivo en busca de cambios mediante sondeos cada interval_s segundos hasta que ocurra un cambio o transcurran timeout_s segundos. El interval_s debe ser un período largo; el valor predeterminado es de 5.007 segundos.

Devuelve un par de objetos de estado (previous, current) cuando se detecta un cambio. El estado previous es siempre un StatStruct, pero puede tener todos los campos en cero (indicando que el archivo no existía previamente o no era accesible anteriormente).

El objeto de estado current puede ser un StatStruct, un EOFError (indicando que se agotó el tiempo de espera), o algún otro subtipo de Exception (si la operación stat falló - por ejemplo, si la ruta no existe).

Para determinar cuándo se modificó un archivo, compara current isa StatStruct && mtime(prev) != mtime(current) para detectar la notificación de cambios. Sin embargo, usar watch_file para esta operación es preferible, ya que es más confiable y eficiente, aunque en algunas situaciones puede no estar disponible.

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

Observa el archivo o directorio path en busca de cambios hasta que ocurra un cambio o transcurran timeout_s segundos. Esta función no sondea el sistema de archivos y, en su lugar, utiliza funcionalidades específicas de la plataforma para recibir notificaciones del sistema operativo (por ejemplo, a través de inotify en Linux). Consulta la documentación de NodeJS vinculada a continuación para más detalles.

El valor devuelto es un objeto con campos booleanos renamed, changed y timedout, que indican el resultado de la observación del archivo.

Este comportamiento de esta función varía ligeramente entre plataformas. Consulta https://nodejs.org/api/fs.html#fs_caveats para obtener información más detallada.

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

Observa un archivo o directorio path en busca de cambios hasta que ocurra un cambio o transcurran timeout_s segundos. Esta función no sondea el sistema de archivos y, en su lugar, utiliza funcionalidades específicas de la plataforma para recibir notificaciones del sistema operativo (por ejemplo, a través de inotify en Linux). Consulte la documentación de NodeJS vinculada a continuación para obtener más detalles.

Esto continuará rastreando cambios para path en segundo plano hasta que se llame a unwatch_folder en el mismo path.

El valor devuelto es un par donde el primer campo es el nombre del archivo cambiado (si está disponible) y el segundo campo es un objeto con campos booleanos renamed, changed y timedout, que indican el evento.

Este comportamiento de esta función varía ligeramente entre plataformas. Consulte https://nodejs.org/api/fs.html#fs_caveats para obtener información más detallada.

source
FileWatching.unwatch_folderFunction
unwatch_folder(path::AbstractString)

Detener el seguimiento en segundo plano de los cambios para path. No se recomienda hacer esto mientras otra tarea está esperando que watch_folder devuelva en la misma ruta, ya que el resultado puede ser impredecible.

source

Pidfile

Una herramienta de utilidad simple para crear archivos pid de asesoramiento (archivos de bloqueo).

Primary Functions

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

Crea un bloqueo de pidfile para la ruta "at" para el proceso actual o el proceso identificado por pid o proc. Puede tomar una función para ejecutar una vez bloqueado, para su uso en bloques do, después de lo cual el bloqueo se cerrará automáticamente. Si el bloqueo falla y wait es falso, se lanzará un error.

El bloqueo se liberará ya sea por close, un finalizer, o poco después de que proc salga. Asegúrate de que el valor de retorno esté vivo hasta el final de la sección crítica de tu programa, para que el finalizer no lo recupere demasiado pronto.

Argumentos opcionales:

  • mode: modo de acceso al archivo (modificado por la máscara de usuario del proceso). Por defecto es legible por todos.
  • poll_interval: Especifica el tiempo máximo entre intentos (si watch_file no funciona)
  • stale_age: Elimina un pidfile existente (ignorando el bloqueo) si es más antiguo que esta cantidad de segundos, basado en su mtime. El archivo no se eliminará hasta 5x más que esto si el pid en el archivo parece que puede ser válido. O 25x más si refresh se anula a 0 para deshabilitar la actualización del bloqueo. Por defecto, esto está deshabilitado (stale_age = 0), pero un valor típico recomendado sería alrededor de 3-5x un tiempo de finalización normal estimado.
  • refresh: Mantiene un bloqueo de volverse obsoleto actualizando el mtime cada intervalo de tiempo que pasa. Por defecto, esto se establece en stale_age/2, que es el valor recomendado.
  • wait: Si es verdadero, bloquea hasta que obtengamos el bloqueo; si es falso, lanza un error si el bloqueo falla.
source
FileWatching.Pidfile.trymkpidlockFunction
trymkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
trymkpidlock(at::String, proc::Process; kwopts...)

Como mkpidlock excepto que devuelve false en lugar de esperar si el archivo ya está bloqueado.

Julia 1.10

Esta función requiere al menos Julia 1.10.

source
Base.closeMethod
close(lock::LockMonitor)

Libera un bloqueo de archivo pid.

source

Helper Functions

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

Crea un nuevo archivo para acceso exclusivo de lectura-escritura por asesoría. Si wait es false, entonces genera un error si los archivos de bloqueo existen; de lo contrario, bloquea hasta que obtengamos el bloqueo.

Para una descripción de los argumentos de palabra clave, consulta mkpidlock.

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

Intenta crear un nuevo archivo para acceso exclusivo de lectura-escritura, devuelve nada si ya existe.

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

Intenta analizar nuestro formato de pidfile, reemplazando un elemento con (0, "", 0.0), respectivamente, para cualquier lectura que falló.

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

Función auxiliar para open_exclusive para decidir si un pidfile está obsoleto.

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

Actualiza el mtime en el bloqueo, para indicar que sigue siendo reciente.

Consulta también la palabra clave refresh en el constructor mkpidlock.

source