ステータス ポーリングを使用して Go でファイルの変更を検出する
Go では、ステータス ポーリングを使用してファイルの変更を検出できます。 Go はファイル変更通知用の Unix fcntl() 関数と直接同等のものを提供しませんが、ステータスポーリングはクロスプラットフォームソリューションを提供します。
func watchFile(filePath string) error { initialStat, err := os.Stat(filePath) if err != nil { return err } for { stat, err := os.Stat(filePath) if err != nil { return err } if stat.Size() != initialStat.Size() || stat.ModTime() != initialStat.ModTime() { break } time.Sleep(1 * time.Second) } return nil }
使用法:
doneChan := make(chan bool) go func(doneChan chan bool) { defer func() { doneChan <- true }() err := watchFile("/path/to/file") if err != nil { fmt.Println(err) } fmt.Println("File has been changed") }(doneChan) <-doneChan
Thisこのソリューションはシステム コールの効率性を提供しませんが、すべてのプラットフォームで動作するシンプルなアプローチを提供し、さまざまなユースケースに十分である可能性があります。
以上がステータスポーリングを使用して Go でファイルの変更を検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。