关闭终端中的回显 - Golang
Turn off echoing in terminal - Golang
我正在尝试关闭终端中的回显,在 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)
}
}
}
但它没有按预期工作
我仍然能够看到回显值,
我做错了什么,有人可以指出或指导我吗?
问题出在 tcsetattr - parameters
err = unix.IoctlSetTermios(STDINFILENO, unix.TCSAFLUSH, &rawState)
采取行动 TCSAFLUSH
,
DOC 建议:
TCSADRAIN
Make the change after waiting until all queued output has been written. You should usually use this option when changing parameters that affect output.
TCSAFLUSH
This is like TCSADRAIN, but also discards any queued input.
所以上面例子中的 termios
将字符发送回左边(“master” pty),因为在这种情况下 ECHO
直到输出被写入shell
(“从属”企业)。
将操作更改为 TCSANOW - the change shall occur immediately
立即关闭回声。
我正在尝试关闭终端中的回显,在 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)
}
}
}
但它没有按预期工作
我仍然能够看到回显值,
我做错了什么,有人可以指出或指导我吗?
问题出在 tcsetattr - parameters
err = unix.IoctlSetTermios(STDINFILENO, unix.TCSAFLUSH, &rawState)
采取行动 TCSAFLUSH
,
DOC 建议:
TCSADRAIN
Make the change after waiting until all queued output has been written. You should usually use this option when changing parameters that affect output.
TCSAFLUSH
This is like TCSADRAIN, but also discards any queued input.
所以上面例子中的 termios
将字符发送回左边(“master” pty),因为在这种情况下 ECHO
直到输出被写入shell
(“从属”企业)。
将操作更改为 TCSANOW - the change shall occur immediately
立即关闭回声。