События файлов
FileWatching.poll_fdФункция
poll_fd(fd, timeout_s::Real=-1; readable=false, writable=false)
Отслеживать дескриптор файла fd на наличие изменений в доступности чтения или записи, с таймаутом, заданным значением timeout_s секунд.
Ключевые аргументы определяют, какие статусы чтения и/или записи должны отслеживаться; хотя бы один из них должен быть установлен в true.
Возвращаемое значение — объект с булевыми полями readable, writable, и timedout, содержащими результат опроса.
FileWatching.poll_fileФункция
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_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.
FileWatching.watch_folderФункция
watch_folder(path::AbstractString, timeout_s::Real=-1)
Отслеживать изменения в файле или каталоге path до тех пор, пока не произойдёт изменение или не истечёт timeout_s секунд. Эта функция не опрашивает файловую систему, а вместо этого использует платформозависимые функции для получения уведомлений от операционной системы (например, через inotify в Linux). Подробности см. в документации NodeJS по ссылкам ниже.
Будет продолжать отслеживать изменения в фоновом режиме до тех пор, пока не будет вызван path, на том же path.
Возвращаемое значение — пара, где первое поле — имя изменённого файла (если доступно), а второе — объект с булевыми полями renamed, changed, и timedout, содержащими данные события.
Это поведение функции немного отличается на разных платформах. Более подробную информацию см. на https://nodejs.org/api/fs.html#fs_caveats.
FileWatching.unwatch_folderФункция
unwatch_folder(path::AbstractString)
Остановить фоновое отслеживание изменений для path. Не рекомендуется делать это, когда другая задача ожидает, пока watch_folder вернётся по тому же пути, так как результат может быть непредсказуемым.
Файл PID
Простая утилита для создания консультативных файлов PID (файлы блокировки).
Основные функции
FileWatching.Pidfile.mkpidlockФункция
mkpidlock([f::Function], at::String, [pid::Cint]; kwopts...) mkpidlock(at::String, proc::Process; kwopts...)
Создать блокировку файла PID для пути "at" для текущего процесса или процесса, идентифицированного по pid или proc. Может принимать функцию для выполнения после получения блокировки, для использования в do блоках, после чего блокировка будет автоматически закрыта. Если блокировка не удалась и wait равно false, то генерируется ошибка.
Блокировка будет освобождена либо close, либо finalizer, либо вскоре после завершения работы proc. Убедитесь, что возвращаемое значение сохраняется до конца критической секции вашей программы, чтобы finalizer не забрал его слишком рано.
Необязательные ключевые аргументы:
-
mode: режим доступа к файлу (модифицируется маской umask процесса). По умолчанию — доступно всем. -
poll_interval: Указывает максимальное время между попытками (еслиwatch_fileне работает) -
stale_age: Удалить существующий файл PID (проигнорировав блокировку), если он старше этого количества секунд, исходя из его mtime. Файл не будет удалён, пока он не станет в 5 раз старше, если pid в файле кажется корректным. Или в 25 раз старше, еслиrefreshпереопределён в 0 для отключения обновления блокировки. По умолчанию это отключено (stale_age= 0), но типовое рекомендуемое значение — около 3-5 раз больше предполагаемого нормального времени завершения. -
refresh: Предотвращает устаревание блокировки, обновляя mtime каждые прошедшие интервалы времени. По умолчанию установлено вstale_age/2, что является рекомендуемым значением. -
wait: Если true, ожидать блокировку, если false, генерировать ошибку при неудачной блокировке.
FileWatching.Pidfile.trymkpidlockФункция
trymkpidlock([f::Function], at::String, [pid::Cint]; kwopts...) trymkpidlock(at::String, proc::Process; kwopts...)
Аналогично mkpidlock но возвращает false вместо ожидания, если файл уже заблокирован.
Эта функция требует по крайней мере Julia 1.10.
Base.closeМетод
close(lock::LockMonitor)
Освободить блокировку файла PID.
Вспомогательные функции
FileWatching.Pidfile.open_exclusiveФункция
open_exclusive(path::String; mode, poll_interval, wait, stale_age, refresh) :: File
Создать новый файл для чтений-записи с консультативным эксклюзивным доступом. Если wait равно false, то генерировать ошибку, если файлы блокировки существуют; в противном случае ожидать блокировку.
Описание ключевых аргументов см. в mkpidlock.
FileWatching.Pidfile.tryopen_exclusiveФункция
tryopen_exclusive(path::String, mode::Integer = 0o444) :: Union{Void, File}
Попробовать создать новый файл для чтений-записи с консультативным эксклюзивным доступом; вернуть ничего, если он уже существует.
FileWatching.Pidfile.write_pidfileФункция
write_pidfile(io, pid)
Записать наш формат файла PID в открытый дескриптор ввода-вывода.
FileWatching.Pidfile.parse_pidfileФункция
parse_pidfile(file::Union{IO, String}) => (pid, hostname, age)
Попытка распарсить наш формат файла PID, заменить элемент (0, "", 0.0), соответственно, для любого считывания, которое не удалось.
FileWatching.Pidfile.stale_pidfileФункция
stale_pidfile(path::String, stale_age::Real, refresh::Real) :: Bool
Вспомогательная функция для open_exclusive для определения, является ли файл PID устаревшим.
FileWatching.Pidfile.isvalidpidФункция
isvalidpid(hostname::String, pid::Cuint) :: Bool
Попытка консервативно оценить, является ли pid корректным идентификатором процесса.
Base.Filesystem.touchМетод
Base.touch(::Pidfile.LockMonitor)
Обновить mtime блокировки, чтобы показать, что она всё ещё актуальна.
См. также ключевой аргумент refresh в конструкторе mkpidlock.
© 2009–2024 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.11/stdlib/FileWatching/