fd.go 769 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package proc
  2. import (
  3. "os"
  4. "strconv"
  5. "strings"
  6. )
  7. type FdInfo struct {
  8. MntId string
  9. Flags int
  10. Dest string
  11. }
  12. func GetFdInfo(pid uint32, fd uint32) *FdInfo {
  13. fds := strconv.Itoa(int(fd))
  14. data, err := os.ReadFile(Path(pid, "fdinfo", fds))
  15. if err != nil {
  16. return nil
  17. }
  18. dest, err := os.Readlink(Path(pid, "fd", fds))
  19. if err != nil {
  20. return nil
  21. }
  22. res := FdInfo{Dest: dest}
  23. for _, line := range strings.Split(string(data), "\n") {
  24. if strings.HasPrefix(line, "mnt_id:") {
  25. res.MntId = strings.TrimSpace(strings.TrimPrefix(line, "mnt_id:"))
  26. continue
  27. }
  28. if strings.HasPrefix(line, "flags:") {
  29. flags, _ := strconv.ParseInt(strings.TrimSpace(strings.TrimPrefix(line, "flags:")), 8, 32)
  30. res.Flags = int(flags)
  31. continue
  32. }
  33. }
  34. return &res
  35. }