Skip to content

Instantly share code, notes, and snippets.

@syossan27
Created September 24, 2017 11:04
Show Gist options
  • Select an option

  • Save syossan27/256c158a87249ce2bd7fd6ba89f0b674 to your computer and use it in GitHub Desktop.

Select an option

Save syossan27/256c158a87249ce2bd7fd6ba89f0b674 to your computer and use it in GitHub Desktop.
package main
import (
"log"
"syscall"
)
func main() {
// kqueueの作成
kq, err := syscall.Kqueue()
if err != nil {
panic(err)
}
// hoge.txtを開く
fd, err := syscall.Open("./hoge.txt", syscall.O_RDONLY, 0)
if err != nil {
panic(err)
}
// keventを作成
ev := syscall.Kevent_t{
Ident: uint64(fd), // ここでhoge.txtのファイルディスクリプタを指定
Filter: syscall.EVFILT_VNODE,
Flags: syscall.EV_ADD | syscall.EV_ENABLE | syscall.EV_ONESHOT,
Fflags: syscall.NOTE_DELETE | syscall.NOTE_WRITE,
Data: 0,
Udata: nil,
}
// タイムアウト設定
timeout := syscall.Timespec{
Sec: 0,
Nsec: 0,
}
// イベント監視
for {
// keventの作成
events := make([]syscall.Kevent_t, 10)
nev, err := syscall.Kevent(kq, []syscall.Kevent_t{ev}, events, &timeout)
if err != nil {
log.Println("Error creating kevent")
}
// イベントが来ているかどうかのチェック
for i := 0; i < nev; i++ {
log.Printf("Event [%d] -> %+v", i, events[i])
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment