【问题标题】:golang unix.TCGETS equivalent on MacMac 上的 golang unix.TCGETS 等价物
【发布时间】:2021-12-10 01:20:43
【问题描述】:

在 Linux 上,我使用以下代码来启用和禁用控制台回显:

unix.IoctlGetTermios(int(os.Stdin.Fd()), unix.TCGETS)
unix.IoctlSetTermios(unix.Stdout, unix.TCSETS, term)

但是在 Mac 上编译不了,我应该在 Mac 上用什么?

【问题讨论】:

  • 它到底怎么编译不了?你能分享一个具体的错误吗?

标签: linux macos go


【解决方案1】:

您可以在 Mac OS 上改用 TIOCGETATIOCSETA

// IoctlSetTermios performs an ioctl on fd with a *Termios.
//
// The req value will usually be TCSETA or TIOCSETA.
func IoctlSetTermios(fd int, req uint, value *Termios) error {
import (
        "bufio"
        "fmt"
        "log"
        "os"

        "golang.org/x/sys/unix"
)

func main() {
        STDIN := int(os.Stdin.Fd())

        tio, err := unix.IoctlGetTermios(STDIN, unix.TIOCGETA)
        if err != nil {
                log.Fatal(err)
        }

        fmt.Println("Input sth:")

        tio.Lflag &^= unix.ECHO
        err = unix.IoctlSetTermios(STDIN, unix.TIOCSETA, tio)
        if err != nil {
                log.Fatal(err)
        }

        reader := bufio.NewReader(os.Stdin)
        line, _ := reader.ReadString('\n')

        tio.Lflag |= unix.ECHO
        err = unix.IoctlSetTermios(STDIN, unix.TIOCSETA, tio)
        if err != nil {
                log.Fatal(err)
        }

        fmt.Println(line)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 2010-12-27
    • 2011-01-26
    • 2017-04-04
    相关资源
    最近更新 更多