【发布时间】:2018-09-07 03:29:49
【问题描述】:
我正在尝试在 Golang 中关闭终端中的回显,
代码:
func main() {
STDINFILE := os.Stdin
STDINFILENO := 0
raw, err := unix.IoctlGetTermios(STDINFILENO, unix.TCGETA)
if err != nil {
panic(err)
}
rawState := *raw
rawState.Lflag &^= unix.ECHO
err = unix.IoctlSetTermios(STDINFILENO, unix.TCSAFLUSH, &rawState)
if err != nil {
panic(err)
}
var charValue byte
reader := bufio.NewReader(STDINFILE)
for {
var err error
// read one byte
charValue, err = reader.ReadByte()
if err != nil {
if err == io.EOF {
fmt.Println("END OF FILE")
}
}
// press q to quit.
if charValue == 'q' {
os.Exit(0)
}
}
}
但它没有按预期工作
我仍然能够看到回显的值,
我做错了什么,有人可以指出我或指导我吗?
【问题讨论】:
-
你不使用
terminal.ReadPassword有什么原因吗? -
是的,原因是试图从更基础的层面学习这个概念。
-
您总是可以看到
terminal.ReadPassword实现here。它或多或少与您的相同,但不是使用unix.TCGETA和unix.TCSAFLUSH,而是使用unix.TCGETS和unix.TCSETS... -
请不要包含文本的屏幕截图。最好将文本直接复制并粘贴到问题中。
-
@people downvoting,如果您能提供原因,我们将不胜感激。
标签: go terminal echo system ioctl