2017-10-08 41 views
1

golangのsyscallライブラリのinotify機能を使いこなしています。私はInotifyInitでinotify機能をセットアップし、InotifyAddWatchと見るファイルを追加して、Read機能でファイルの変更を検出することができます。私が抱えている問題は、Read関数がinotifyイベントに関する情報を含むバイト配列だけを読み込むということです。私はきちんとバイト配列をsyscall.InotifyEvent構造体をGolangに変換する

以下

をinotifyをイベントに関する情報にアクセスできるように/がInotifyEvent構造にそのバイトの配列をキャストに変換したいのですが、私がこれまで持っているものである:あなたの助けのための

package main 

import (
    "fmt" 
    "syscall" 
) 

func main() { 
    buff := make([]byte, 64) 
    inotefd, err := syscall.InotifyInit() 
    if err != nil { 
     fmt.Println(err) 
    } 
    _, err = syscall.InotifyAddWatch(inotefd, "/home/me/foo", syscall.IN_MODIFY) 
    if err != nil { 
     fmt.Println(err) 
    } 

    for { 
     n, err := syscall.Read(inotefd, buff) 
     if err != nil { 
      fmt.Println(err) 
      return 
     } 

     if n < 0 { 
      fmt.Println("Read Error") 
      return 
     } 

     fmt.Printf("Buffer: %v\n", buff) 
     //can't cast []buff into InotifyEvent struct 
     fmt.Printf("Cookie: %v\n", buff[0:4]) 
     fmt.Printf("Len: %v\n", buff[4:8]) 
     fmt.Printf("Mask: %v\n", buff[8:12]) 
     fmt.Printf("Name: %v\n", buff[12:13]) 
     fmt.Printf("Wd: %v\n", buff[13:17]) 
    } 
} 

ありがとう!

答えて

1

あなたはそのためunsafeパッケージを使用することができます。

info := *((*syscall.InotifyEvent)(unsafe.Pointer(&buff[0]))) 
関連する問題