幕布斯7119047
2023-03-29 17:21:29
我正在嘗試關(guān)閉終端中的回聲,在 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) } }}但它沒有按預(yù)期工作我仍然能夠看到回聲值,我做錯(cuò)了什么,有人可以指出我或指導(dǎo)我嗎?
1 回答

呼啦一陣風(fēng)
TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊
問題在于tcsetattr - parameters
?err = unix.IoctlSetTermios(STDINFILENO, unix.TCSAFLUSH, &rawState)
用行動(dòng)TCSAFLUSH
,
文檔建議:
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
在上面的例子中是將字符發(fā)送回左邊(“主”pty),ECHO
在這種情況下直到輸出被寫入shell
(“從”pty)才關(guān)閉。
將動(dòng)作更改為TCSANOW - the change shall occur immediately
?立即關(guān)閉回聲。
- 1 回答
- 0 關(guān)注
- 266 瀏覽
添加回答
舉報(bào)
0/150
提交
取消