File Events

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

Мониторинг файлового дескриптора fd на изменения в доступности для чтения или записи, с тайм-аутом, заданным в секундах timeout_s.

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

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

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

source
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 для получения более подробной информации.

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

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

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

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

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

source
FileWatching.unwatch_folderFunction
unwatch_folder(path::AbstractString)

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

source

Pidfile

Простой утилитный инструмент для создания advisory pidfiles (файлов блокировки).

Primary Functions

FileWatching.Pidfile.mkpidlockFunction
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. Файл не будет удален, пока не пройдет 5x больше времени, чем это, если pid в файле кажется действительным. Или 25x больше, если refresh переопределен на 0, чтобы отключить обновление блокировки. По умолчанию это отключено (stale_age = 0), но типичное рекомендуемое значение составляет около 3-5x оценочного нормального времени завершения.
  • refresh: Предотвращает устаревание блокировки, обновляя mtime через каждый интервал времени. По умолчанию это установлено на stale_age/2, что является рекомендуемым значением.
  • wait: Если true, блокировать до получения блокировки, если false, выбросить ошибку, если блокировка не удалась.
source
FileWatching.Pidfile.trymkpidlockFunction
trymkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
trymkpidlock(at::String, proc::Process; kwopts...)

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

Julia 1.10

Эта функция требует как минимум Julia 1.10.

source
Base.closeMethod
close(lock::LockMonitor)

Освободите блокировку pidfile.

source

Helper Functions

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

Создайте новый файл для чтения-записи с эксклюзивным доступом по совету. Если wait равно false, то выдать ошибку, если файлы блокировки существуют, в противном случае заблокироваться до получения блокировки.

Для описания аргументов ключевых слов смотрите mkpidlock.

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

Попробуйте создать новый файл для доступа с эксклюзивным чтением-записью, ничего не возвращайте, если он уже существует.

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

Попытка разобрать наш формат pidfile, заменив элемент на (0, "", 0.0) соответственно для любого неудачного чтения.

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

Вспомогательная функция для open_exclusive, которая определяет, является ли pidfile устаревшим.

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

Попытка осторожно оценить, является ли pid допустимым идентификатором процесса.

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

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

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

source