小编lyd*_*ric的帖子

golang 中的终端:syscall 与 os/exec stty

这是如何通过 go 中的系统调用获取 (POSIX) 终端大小的方法:

func getTermDim() (width, height int, err error) {
    var termDim [4]uint16
    if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(0), uintptr(syscall.TIOCGWINSZ), uintptr(unsafe.Pointer(&termDim)), 0, 0, 0); err != 0 {
        return -1, -1, err
    }
    return int(termDim[1]), int(termDim[0]), nil
}
Run Code Online (Sandbox Code Playgroud)

现在,同样的事情,用 os/exec 调用 stty:

func getTermDim() (width, height int, err error) {
        cmd := exec.Command("stty", "size")
        cmd.Stdin = os.Stdin
        var termDim []byte
        if termDim, err = cmd.Output(); err != nil {
                return
        }
        fmt.Sscan(string(termDim), &height, &width)
        return
} …
Run Code Online (Sandbox Code Playgroud)

terminal system-calls go stty

6
推荐指数
1
解决办法
2477
查看次数

标签 统计

go ×1

stty ×1

system-calls ×1

terminal ×1