Документация Engee

Изменения в файлах

# FileWatching.poll_fdFunction

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

Отслеживает изменение доступности файла с дескриптором fd для чтения или записи с временем ожидания timeout_s секунд.

Именованные аргументы определяют, какие состояния (чтение и (или) запись) следует отслеживать; по крайней мере один из них должен иметь значение true.

Возвращается объект с логическими полями readable, writable и timedout, представляющими результат опроса.

# FileWatching.poll_fileFunction

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

Отслеживает изменение файла, выполняя опрос каждые interval_s секунд, пока не произойдет изменение или не пройдет timeout_s секунд. Период interval_s должен быть длительным; значение по умолчанию — 5,007 секунды.

Возвращает пару объектов состояния (previous, current) при обнаружении изменения. Состояние previous — это всегда структура StatStruct, но все ее поля могут быть нулевыми (это означает, что файл ранее не существовал или не был доступен).

Объект состояния current может быть структурой StatStruct, исключением EOFError (с указанием прошедшего времени ожидания) или другим подтипом Exception (если операция stat не удалась, например, если путь не существует).

Чтобы определить время изменения файла, выполните сравнение current isa StatStruct && mtime(prev) != mtime(current) для обнаружения уведомления об изменениях. Однако для этой операции предпочтительнее использовать функцию watch_file, так как она надежнее и эффективнее, хотя в некоторых ситуациях она может быть недоступна.

# FileWatching.watch_fileFunction

watch_file(path::AbstractString, timeout_s::Real=-1)

Отслеживает изменения в файле или каталоге path, пока не произойдет изменение или не пройдет timeout_s секунд. Эта функция не опрашивает файловую систему, а вместо этого использует возможности платформы для получения уведомлений от операционной системы (например, inotify в Linux). Подробные сведения см. в документации по NodeJS по приведенной ниже ссылке.

Возвращается объект с логическими полями renamed, changed и timedout, представляющими результат отслеживания файла.

Поведение этой функции на разных платформах немного различается. Дополнительные сведения см. на странице https://nodejs.org/api/fs.html#fs_caveats .

# FileWatching.watch_folderFunction

watch_folder(path::AbstractString, timeout_s::Real=-1)

Отслеживает изменения в файле или каталоге path, пока не произойдет изменение или не пройдет timeout_s секунд. Эта функция не опрашивает файловую систему, а вместо этого использует возможности платформы для получения уведомлений от операционной системы (например, inotify в Linux). Подробные сведения см. в документации по NodeJS по приведенной ниже ссылке.

Отслеживание изменений по пути path будет продолжаться в фоновом режиме, пока для того же пути path не будет вызвана функция unwatch_folder.

Возвращаемое значение представляет собой пару полей, первое из которых — это имя измененного файла (если доступно), а второе — это объект с логическими полями renamed, changed и timedout, описывающими событие.

Поведение этой функции на разных платформах немного различается. Дополнительные сведения см. на странице https://nodejs.org/api/fs.html#fs_caveats .

# FileWatching.unwatch_folderFunction

unwatch_folder(path::AbstractString)

Останавливает отслеживание изменений по пути path в фоновом режиме. Это не рекомендуется делать, пока другая задача ожидает возврата управления функцией watch_folder, выполняющейся для того же пути, так как результат может быть непредсказуемым.

Pidfile

Простое вспомогательное средство для создания справочных файлов pidfile (файлов блокировки).

Основные функции

# FileWatching.Pidfile.mkpidlockFunction

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

Create a pidfile lock for the path "at" for the current process or the process identified by pid or proc. Can take a function to execute once locked, for usage in do blocks, after which the lock will be automatically closed. If the lock fails and wait is false, then an error is thrown.

The lock will be released by either close, a finalizer, or shortly after proc exits. Make sure the return value is live through the end of the critical section of your program, so the finalizer does not reclaim it early.

Optional keyword arguments:

  • mode: file access mode (modified by the process umask). Defaults to world-readable.

  • poll_interval: Specify the maximum time to between attempts (if watch_file doesn’t work)

  • stale_age: Delete an existing pidfile (ignoring the lock) if its mtime is older than this. The file won’t be deleted until 25x longer than this if the pid in the file appears that it may be valid. By default this is disabled (stale_age = 0), but a typical recommended value would be about 3-5x an estimated normal completion time.

  • refresh: Keeps a lock from becoming stale by updating the mtime every interval of time that passes. By default, this is set to stale_age/2, which is the recommended value.

  • wait: If true, block until we get the lock, if false, raise error if lock fails.

# Base.closeMethod

close(lock::LockMonitor)

Release a pidfile lock.

Вспомогательные функции

# FileWatching.Pidfile.open_exclusiveFunction

open_exclusive(path::String; mode, poll_interval, stale_age) :: File

Create a new a file for read-write advisory-exclusive access. If wait is false then error out if the lock files exist otherwise block until we get the lock.

For a description of the keyword arguments, see mkpidlock.

# FileWatching.Pidfile.tryopen_exclusiveFunction

tryopen_exclusive(path::String, mode::Integer = 0o444) :: Union{Void, File}

Try to create a new file for read-write advisory-exclusive access, return nothing if it already exists.

# FileWatching.Pidfile.write_pidfileFunction

write_pidfile(io, pid)

Write our pidfile format to an open IO descriptor.

# FileWatching.Pidfile.parse_pidfileFunction

parse_pidfile(file::Union{IO, String}) => (pid, hostname, age)

Attempt to parse our pidfile format, replaced an element with (0, "", 0.0), respectively, for any read that failed.

# FileWatching.Pidfile.stale_pidfileFunction

stale_pidfile(path::String, stale_age::Real) :: Bool

Helper function for open_exclusive for deciding if a pidfile is stale.

# FileWatching.Pidfile.isvalidpidFunction

isvalidpid(hostname::String, pid::Cuint) :: Bool

Attempt to conservatively estimate whether pid is a valid process id.

# Base.Filesystem.touchMethod

Base.touch(::Pidfile.LockMonitor)

Обновляет mtime для блокировки, чтобы указать ее актуальное состояние.

См. также описание ключевого слова refresh в конструкторе mkpidlock.