日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame文件監(jiān)控-gfsnotify

?gfsnotify?能監(jiān)控指定文件/目錄的改變,如文件的增加、刪除、修改、重命名等操作。

鳳臺(tái)網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),鳳臺(tái)網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為鳳臺(tái)上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的鳳臺(tái)做網(wǎng)站的公司定做!

使用方式:

import "github.com/GOgf/gf/v2/os/gfsnotify"

接口文檔:

https://pkg.go.dev/github.com/gogf/gf/v2/os/gfsnotify

推薦使用?gfsnotify?模塊提供的?Add?和?Remove?模塊方法,用于添加監(jiān)控和取消監(jiān)控。推薦原因見(jiàn)隨后章節(jié)說(shuō)明。

此外也可能通過(guò)?New?方法創(chuàng)建一個(gè)監(jiān)控管理對(duì)象之后再進(jìn)行監(jiān)控管理。其中,添加監(jiān)控的時(shí)候需要給定觸發(fā)監(jiān)控時(shí)的回調(diào)函數(shù),參數(shù)類(lèi)型為?*gfsnotify.Event?對(duì)象指針。

添加監(jiān)聽(tīng)

package main

import (
    "github.com/gogf/gf/v2/os/gfsnotify"
    "github.com/gogf/gf/v2/os/glog"
)

func main() {
    // /home/john/temp 是一個(gè)目錄,當(dāng)然也可以指定文件
    path := "/home/john/temp"
    _, err := gfsnotify.Add(path, func(event *gfsnotify.Event) {
        if event.IsCreate() {
            glog.Println("創(chuàng)建文件 : ", event.Path)
        }
        if event.IsWrite() {
            glog.Println("寫(xiě)入文件 : ", event.Path)
        }
        if event.IsRemove() {
            glog.Println("刪除文件 : ", event.Path)
        }
        if event.IsRename() {
            glog.Println("重命名文件 : ", event.Path)
        }
        if event.IsChmod() {
            glog.Println("修改權(quán)限 : ", event.Path)
        }
        glog.Println(event)
    })

    // 移除對(duì)該path的監(jiān)聽(tīng)
    // gfsnotify.Remove(path)

    if err != nil {
        glog.Fatalln(err)
    } else {
        select {}
    }
}

其中?/home/john?參數(shù)為一個(gè)目錄,?gfsnotify.Add?方法默認(rèn)為遞歸監(jiān)控,也就是說(shuō)當(dāng)目錄下的文件(包括子目錄下的文件)發(fā)生變化時(shí),也會(huì)收到文件監(jiān)控信息回調(diào)。

當(dāng)我們?cè)?/home/john?目錄下創(chuàng)建/刪除/修改文件時(shí),可以看到?gfsnotify?監(jiān)控到了文件的修改并輸出了對(duì)應(yīng)的事件信息。

移除監(jiān)聽(tīng)

移除監(jiān)聽(tīng)我們可以使用?Remove?方法,會(huì)移除對(duì)整個(gè)文件/目錄的監(jiān)聽(tīng)。

當(dāng)對(duì)同一個(gè)文件/目錄存在多個(gè)監(jiān)聽(tīng)回調(diào)時(shí),我們可以通過(guò)?RemoveCallback?方法移除指定的回調(diào)。方法參數(shù)?callbackId?是在添加監(jiān)聽(tīng)時(shí)返回的?Callback?對(duì)象的唯一ID。

使用示例1:

package main

import (
    "github.com/gogf/gf/v2/os/gfsnotify"
    "github.com/gogf/gf/v2/os/glog"
    "github.com/gogf/gf/v2/os/gtimer"
    "time"
)

func main() {
    c1, err := gfsnotify.Add("/home/john/temp/log", func(event *gfsnotify.Event) {
        glog.Println("callback1")
    })
    if err != nil {
        panic(err)
    }
    c2, err := gfsnotify.Add("/home/john/temp/log", func(event *gfsnotify.Event) {
        glog.Println("callback2")
    })
    if err != nil {
        panic(err)
    }
    // 5秒后移除c1的回調(diào)函數(shù)注冊(cè),僅剩c2
    gtimer.SetTimeout(5*time.Second, func() {
        gfsnotify.RemoveCallback(c1.Id)
        glog.Println("remove callback c1")
    })
    // 10秒后移除c2的回調(diào)函數(shù)注冊(cè),所有的回調(diào)都移除,不再有任何打印信息輸出
    gtimer.SetTimeout(10*time.Second, func() {
        gfsnotify.RemoveCallback(c2.Id)
        glog.Println("remove callback c2")
    })

    select {}
}

使用示例2:

package main

import (
    "github.com/gogf/gf/v2/os/gfsnotify"
    "github.com/gogf/gf/v2/os/glog"
    "github.com/gogf/gf/v2/os/gtimer"
    "time"
)

func main() {
    callback, err := gfsnotify.Add("/home/john/temp", func(event *gfsnotify.Event) {
        glog.Println("callback")
    })
    if err != nil {
        panic(err)
    }

    // 在此期間創(chuàng)建文件、目錄、修改文件、刪除文件

    // 20秒后移除回調(diào)函數(shù)注冊(cè),所有的回調(diào)都移除,不再有任何打印信息輸出
    gtimer.SetTimeout(20*time.Second, func() {
        gfsnotify.RemoveCallback(callback.Id)
        glog.Println("remove callback")
    })

    select {}
}

fs.inotify.max_user_instances與fs.inotify.max_user_watches

在?*nix?系統(tǒng)下,?gfsnotify?模塊使用的是系統(tǒng)的?inotify?特性來(lái)實(shí)現(xiàn)的文件/目錄監(jiān)控,因此該功能在使用時(shí)會(huì)受到系統(tǒng)的兩個(gè)內(nèi)核函數(shù)限制:

  • ?fs.inotify.max_user_instances?:表示當(dāng)前用戶(hù)可創(chuàng)建的?inotify?監(jiān)控實(shí)例數(shù)量,即?gfsnotify.New?方法創(chuàng)建的?Watcher?對(duì)象數(shù)量,一個(gè)?Watcher?對(duì)象對(duì)應(yīng)系統(tǒng)的一個(gè)?inotify?實(shí)例,系統(tǒng)默認(rèn)數(shù)量為:?128?;
  • ?fs.inotify.max_user_watches?:表示一個(gè)?inotify?實(shí)例可添加的監(jiān)控文件隊(duì)列大小,往同一個(gè)?inotify?添加的監(jiān)控文件超過(guò)該數(shù)量限制則會(huì)失敗,并且會(huì)有系統(tǒng)錯(cuò)誤日志,系統(tǒng)默認(rèn)數(shù)量往往為:?8192?(有的系統(tǒng)該數(shù)值會(huì)比較大一些);


網(wǎng)站名稱(chēng):創(chuàng)新互聯(lián)GoFrame教程:GoFrame文件監(jiān)控-gfsnotify
轉(zhuǎn)載來(lái)源:http://www.dlmjj.cn/article/djdppjc.html