File Events
FileWatching.poll_fd — Functionpoll_fd(fd, timeout_s::Real=-1; readable=false, writable=false)ファイルディスクリプタ fd の読み取りまたは書き込みの可用性の変化を監視し、timeout_s 秒で指定されたタイムアウトを設定します。
キーワード引数は、どの読み取りおよび/または書き込みの状態を監視するかを決定します。少なくとも1つは true に設定する必要があります。
返される値は、ポーリングの結果を示すブール型フィールド readable、writable、および timedout を持つオブジェクトです。
これは FDWatcher に対して wait を呼び出すための薄いラッパーであり、機能を実装していますが、ユーザーが終了時に手動で close を呼び出す必要があり、そうしないと深刻なクラッシュのリスクがあります。
FileWatching.poll_file — Functionpoll_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 && prev == current) を比較して、mtime または inode の変更通知を検出します。ただし、この操作には watch_file を使用することが推奨されます。これはより信頼性が高く効率的ですが、状況によっては利用できない場合があります。
これは PollingFileWatcher の wait を呼び出すための薄いラッパーであり、機能を実装していますが、この関数には poll_file の連続呼び出し間に小さなレースウィンドウがあり、その間にファイルが変更されても検出されない可能性があります。
FileWatching.watch_file — Functionwatch_file(path::AbstractString, timeout_s::Real=-1)ファイルまたはディレクトリ path の変更を監視し、変更が発生するまで、または timeout_s 秒が経過するまで待機します。この関数はファイルシステムをポーリングせず、代わりにプラットフォーム固有の機能を使用してオペレーティングシステムからの通知を受け取ります(例:Linuxのinotifyを介して)。詳細については、以下のNodeJSドキュメントを参照してください。
返される値は、ファイルの監視結果を示すブール型フィールド renamed、changed、および timedout を持つオブジェクトです。
この関数の動作はプラットフォームによってわずかに異なります。詳細な情報については、https://nodejs.org/api/fs.html#fs_caveats を参照してください。
これは FileMonitor の wait を呼び出すための薄いラッパーです。この関数には、連続した watch_file の呼び出しの間にファイルが検出されずに変更される可能性がある小さなレースウィンドウがあります。このレースを避けるために、次のように使用してください。
fm = FileMonitor(path)
wait(fm)毎回 wait する際に同じ fm を再利用します。
FileWatching.watch_folder — Functionwatch_folder(path::AbstractString, timeout_s::Real=-1)ファイルまたはディレクトリ path の変更を監視し、変更が発生するか timeout_s 秒が経過するまで待機します。この関数はファイルシステムをポーリングせず、代わりにプラットフォーム固有の機能を使用してオペレーティングシステムからの通知を受け取ります(例:Linuxのinotifyを介して)。詳細については、以下のNodeJSドキュメントを参照してください。
この関数は、unwatch_folder が同じ path に対して呼び出されるまで、バックグラウンドで path の変更を追跡し続けます。
返される値は、最初のフィールドが変更されたファイルの名前(利用可能な場合)で、2番目のフィールドがイベントを示すブールフィールド renamed、changed、および timedout を持つオブジェクトのペアです。
この関数の動作はプラットフォームによってわずかに異なります。詳細な情報については https://nodejs.org/api/fs.html#fs_caveats を参照してください。
この関数は、タイムアウトサポートを追加した FolderMonitor の wait を呼び出すための薄いラッパーです。
FileWatching.unwatch_folder — Functionunwatch_folder(path::AbstractString)pathの変更に対するバックグラウンドトラッキングを停止します。同じパスでwatch_folderが戻るのを待っている別のタスクがある間にこれを行うことは推奨されません。結果が予測不可能になる可能性があります。
FileWatching.FileMonitor — TypeFileMonitor(path::AbstractString)ファイルまたはディレクトリ path(存在する必要があります)を変更のために監視します。変更が発生するまでこの関数はファイルシステムをポーリングせず、代わりにプラットフォーム固有の機能を使用してオペレーティングシステムからの通知を受け取ります(例:Linuxのinotifyを介して)。詳細については、以下のNodeJSドキュメントを参照してください。
fm = FileMonitor(path) は自動リセットイベントのように動作するため、wait(fm) は指定されたパスに元々あったファイルで少なくとも1つのイベントが発生するまでブロックし、その後、最後の wait 呼び出しから発生したすべての変更を要約するブールフィールド renamed、changed、timedout を持つオブジェクトを返します。
この関数の動作はプラットフォームによってわずかに異なります。詳細な情報については https://nodejs.org/api/fs.html#fs_caveats を参照してください。
FileWatching.FolderMonitor — TypeFolderMonitor(folder::AbstractString)ファイルまたはディレクトリ path の変更を監視します。変更が発生するまで待機します。この関数はファイルシステムをポーリングせず、代わりにプラットフォーム固有の機能を使用してオペレーティングシステムからの通知を受け取ります(例:Linuxのinotifyを介して)。詳細については、以下のNodeJSドキュメントを参照してください。
これはChannelに似た動作をするため、take!(またはwait)を呼び出すと、何らかの変更が発生するまでブロックされます。wait関数は、最初のフィールドが変更されたファイルの名前(利用可能な場合)で、2番目のフィールドがrenamedおよびchangedというブールフィールドを持つオブジェクトを返し、その上で発生したイベントを示します。
この関数の動作はプラットフォームによってわずかに異なります。詳細な情報についてはhttps://nodejs.org/api/fs.html#fs_caveatsを参照してください。
FileWatching.PollingFileWatcher — TypePollingFileWatcher(path::AbstractString, interval_s::Real=5.007)ファイルの変更を監視するために、interval_s 秒ごとに stat をポーリングします。変更が発生するか、timeout_s 秒が経過するまで続けます。interval_s は長い期間であるべきで、デフォルトは 5.007 秒です。最新の結果を得るために stat を呼び出しますが、古い結果になります。
これは自動リセットイベントのように機能するため、wait を呼び出すと、wait 呼び出し時にキャプチャされた前の値から stat 結果が変更されるまでブロックします。wait 関数は、前回 wait が呼び出されてからの stat 変更が検出されると、ステータスオブジェクトのペア (previous, current) を返します。previous ステータスは常に StatStruct ですが、すべてのフィールドがゼロに設定されている場合があります(ファイルが以前は存在しなかったか、以前はアクセスできなかったことを示します)。
current ステータスオブジェクトは StatStruct、EOFError(このオブジェクトを閉じることで待機がキャンセルされた場合)、または他の Exception サブタイプ(stat 操作が失敗した場合、たとえば、パスが削除された場合)である可能性があります。ファイルが再度複数回変更された場合、stat 値が古くなる可能性があることに注意してください。
この操作には FileMonitor を使用することが推奨されます。なぜなら、より信頼性が高く効率的だからです。ただし、状況によっては利用できない場合があります。
FileWatching.FDWatcher — TypeFDWatcher(fd::Union{RawFD,WindowsRawSocket}, readable::Bool, writable::Bool)ファイルディスクリプタ fd の読み取りまたは書き込みの可用性の変化を監視します。
キーワード引数は、どの読み取りおよび/または書き込みの状態を監視するかを決定します。少なくとも1つは true に設定する必要があります。
返される値は、ポーリングの結果を示すブールフィールド readable、writable、および timedout を持つオブジェクトです。
これはレベルセットイベントのように動作するため、wait を呼び出すと、これらの条件のいずれかが満たされるまでブロックしますが、その後は条件がクリアされるまでブロックせずに返され続けます(読み取るものがなくなるか、書き込みバッファに空きがなくなるか、またはその両方です)。
Pidfile
アドバイザリーpidファイル(ロックファイル)を作成するためのシンプルなユーティリティツールです。
Primary Functions
FileWatching.Pidfile.mkpidlock — Functionmkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
mkpidlock(at::String, proc::Process; kwopts...)現在のプロセスまたはpidまたはprocによって識別されるプロセスのために、パス「at」のためのpidファイルロックを作成します。ロックされた後に実行する関数を受け取ることができ、doブロックで使用され、その後ロックは自動的に閉じられます。ロックに失敗し、waitがfalseの場合、エラーがスローされます。
ロックは、close、finalizer、またはprocが終了した後すぐに解放されます。戻り値がプログラムのクリティカルセクションの終わりまで生きていることを確認してください。そうしないと、finalizerが早期にそれを回収してしまいます。
オプションのキーワード引数:
mode: ファイルアクセスモード(プロセスのumaskによって修正されます)。デフォルトは世界中から読み取り可能です。poll_interval: 試行の間の最大時間を指定します(watch_fileが機能しない場合)。stale_age: 既存のpidファイルを削除します(ロックを無視して)、この秒数より古い場合、そのmtimeに基づいています。ファイルは、ファイル内のpidが有効である可能性がある場合、これより5倍長くなるまで削除されません。また、refreshが0にオーバーライドされてロックの更新が無効にされている場合は、25倍長くなります。デフォルトではこれは無効になっています(stale_age= 0)が、一般的に推奨される値は、推定される通常の完了時間の約3-5倍です。refresh: 経過した時間の間隔ごとにmtimeを更新することによって、ロックが古くなるのを防ぎます。デフォルトでは、これはstale_age/2に設定されており、推奨される値です。wait: trueの場合、ロックを取得するまでブロックし、falseの場合、ロックに失敗した場合はエラーを発生させます。
FileWatching.Pidfile.trymkpidlock — Functiontrymkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
trymkpidlock(at::String, proc::Process; kwopts...)mkpidlockと同様ですが、ファイルがすでにロックされている場合は待機するのではなくfalseを返します。
Base.close — Methodclose(lock::LockMonitor)pidfileロックを解除します。
Helper Functions
FileWatching.Pidfile.open_exclusive — Functionopen_exclusive(path::String; mode, poll_interval, wait, stale_age, refresh) :: File読み書きの助言的排他アクセスのために新しいファイルを作成します。waitがfalseの場合、ロックファイルが存在する場合はエラーを出力し、そうでない場合はロックを取得するまでブロックします。
キーワード引数の説明については、mkpidlockを参照してください。
FileWatching.Pidfile.tryopen_exclusive — Functiontryopen_exclusive(path::String, mode::Integer = 0o444) :: Union{Void, File}読み書きの助言的排他アクセスのために新しいファイルを作成しようとし、既に存在する場合は何も返さない。
FileWatching.Pidfile.write_pidfile — Functionwrite_pidfile(io, pid)オープンな IO ディスクリプタに私たちの pidfile フォーマットを書き込みます。
FileWatching.Pidfile.parse_pidfile — Functionparse_pidfile(file::Union{IO, String}) => (pid, hostname, age)私たちのpidfileフォーマットを解析しようとし、失敗した読み取りに対してそれぞれ(0, "", 0.0)に要素を置き換えました。
FileWatching.Pidfile.stale_pidfile — Functionstale_pidfile(path::String, stale_age::Real, refresh::Real) :: Boolopen_exclusive のためのヘルパー関数で、pidfile が古いかどうかを判断します。
FileWatching.Pidfile.isvalidpid — Functionisvalidpid(hostname::String, pid::Cuint) :: Boolpidが有効なプロセスIDであるかどうかを保守的に推定しようとします。
Base.Filesystem.touch — MethodBase.touch(::Pidfile.LockMonitor)ロックの mtime を更新して、それがまだ新しいことを示します。
mkpidlock コンストラクタの refresh キーワードも参照してください。