文件 IO

检查文件权限

const (
   PermR = (4)
   PermW = (2)
   PermX = (1)
)

     if info, err := os.Stat("/proc/1/cmdline"); err == nil {
             log.Println(info.Mode())
             if info.Mode()&PermR == 0 {
                     log.Fatalln("没有对 /proc/1/cmdline 的读权限")
             }
     } else {
             log.Fatalln(err)
     }

监控文件变化

Linux 提供了 inotify 来监控文件系统的变化,有些库对其的包装,这些库有:

func watch(p string, event chan<- EventItem) {
   watcher, err := inotify.NewWatcher()
   if err != nil {
      log.Fatal(err)
   }

   dir := path.Dir(p)
   err = watcher.Watch(dir)
   if err != nil {
      log.Fatal(err)
   }

   register(p)

   go func() {
      defer watcher.Close()
      for {
         select {
            case ev := <-watcher.Event:
                if ev.Mask&(inotify.IN_CLOSE_WRITE) > 0 &&
                   p == ev.Name {

                   event <- diff(p)
               }
            case err := <-watcher.Error:
               log.Println("error:", err)
           }
       }
   }()
}

重要

inotify 无法监视 /proc 这种目录