无法读取 utmpx 文件

标签 c macos unix go

package main

import (
 "os"
 "fmt"
)

func main() {
  fd, err := os.Open("/var/run/utmpx")
  fmt.Println(fd, err)
  var data []byte
  len, err := fd.Read(data)
  fmt.Println(len, err)
}

&{0xc42000a240} nil

0 nil

没有错误,也没有数据。

这个路径/var/run/utmpx是从系统头文件中读取的。

如何得到这个路径是another question

系统:macOS el capiton,go版本go1.8 darwin/amd64

**我的最终目标是将此文件读入 go struct。**此文件包含系统用户信息。

我能做到吗?我会继续努力...

最佳答案

为此,您可以使用 ioutil.ReadFile 函数:

package main

import (
    "fmt"
    "io/ioutil"
)

func main() {
    fd, err := ioutil.ReadFile("/var/run/utmpx")
    fmt.Println(string(fd), err)
}

您原始代码中的问题是您读入了 0 字节长的 data。由于读取器接口(interface)只读到 len(data),所以它什么也读不到。更多信息:https://golang.org/pkg/io/#Reader

关于无法读取 utmpx 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45300938/

相关文章:

c - C 程序的奇怪行为::Kernighan & Ritchie 练习 2-3

python - matplotlib 可拖动图例在 Mac OS 10.8 上不可用吗?

linux - 复制到unix中的目录时如何用空格替换文件名中的下划线

linux - 文件描述符执行 IO 是否需要处理器周期?

c - 为什么需要保存集用户 ID?

c - 写入文件时是否需要调用 fclose()

将 MIPs 指令转换为 C 并减少执行

macos - 在 Mac OS X 上以编程方式隐藏扩展坞

c - 扩展 c 宏 __VA_ARGS__ 元素

macos - 判断 AirPlay 音频设备是否正在使用的方法,受 CoreAudio 方法保护的密码