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

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

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

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

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

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

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, так как она надежнее и эффективнее, хотя в некоторых ситуациях она может быть недоступна.

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.

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.

unwatch_folder(path::AbstractString)

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

Pidfile

A simple utility tool for creating advisory pidfiles (lock files).

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

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

Создает блокировку pidfile для пути «at» для текущего процесса или процесса, на который указывает pid или proc. Может принимать функцию для выполнения после блокировки в блоках do, после чего блокировка будет автоматически закрыта. Если блокировка не удалась и wait имеет значение false, выдается ошибка.

Блокировка будет снята либо функцией close, либо функцией finalizer, либо вскоре после выхода из proc. Возвращаемое значение должно существовать до конца критического раздела программы, чтобы finalizer не отозвал его раньше времени.

Необязательные именованные аргументы:

  • mode: режим доступа к файлу (изменяется при размаскировке процесса). По умолчанию предоставляется глобальный доступ для чтения.

  • poll_interval: указывает максимальное время между попытками (если watch_file не работает).

  • stale_age: существующий pidfile удаляется (игнорируя блокировку), если он старше указанного количества секунд с учетом его mtime. Файл не будет удален, пока его возраст не превысит указанное значение, умноженное на 5, если pid в файле указывает, что он может быть действительным. Или умноженное на 25, если refresh переопределено значением 0 для отключения обновления блокировки. По умолчанию этот параметр отключен (stale_age = 0), но типичное рекомендуемое значение будет примерно в 3—​5 раз больше предполагаемого обычного времени завершения.

  • refresh: предотвращает устаревание блокировки путем обновления mtime через каждый прошедший интервал времени. По умолчанию установлено значение stale_age/2, которое является рекомендуемым.

  • wait: если задано значение true, блокировка действует до тех пор, пока не будет получена; если задано false, то при сбое блокировки выдается ошибка.

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

Аналогично mkpidlock, за исключением того, что возвращает false вместо ожидания, если файл уже заблокирован.

Совместимость: Julia 1.10

Для этой функции требуется версия Julia не ниже 1.10.

close(lock::LockMonitor)

Release a pidfile lock.

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

open_exclusive(path::String; mode, poll_interval, wait, stale_age, refresh) :: 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.

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.

write_pidfile(io, pid)

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

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.

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

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

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

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

Base.touch(::Pidfile.LockMonitor)

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

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