项目中需要获取网卡的一些硬件信息,但遇到一点问题,现在用另一种方式解决了;但还是想搞懂为什么会报这个错误,基础太差,希望得到大佬的指导,非常感谢。
package main
import (
"fmt"
"golang.org/x/sys/unix"
"syscall"
"unsafe"
)
func main() {
for {
go func() {
fd, err := unix.Socket(unix.AF_INET, unix.SOCK_DGRAM, unix.IPPROTO_IP)
defer func() {
if err := unix.Close(fd); err != nil {
fmt.Println("fd 关闭失败:", err)
}
}()
if err != nil {
fmt.Println(err)
return
}
var et struct {
Cmd uint32
Supported uint32
}
const GSET = 0x1
et.Cmd = GSET
var ifr struct {
Name [16]byte
Data uintptr
}
copy(ifr.Name[:], []byte("网卡名称"))
ifr.Data = uintptr(unsafe.Pointer(&et))
const SIOCETHTOOL = 0x8946
// 执行这一步后,fd 就无法关闭,close 返回 bad file descriptor
_, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(SIOCETHTOOL), uintptr(unsafe.Pointer(&ifr)))
if errno != 0 {
fmt.Println(errno)
}
}()
}
select {}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.