我正在使用termbox-go创建一个应用程序。这个库在 windows DOS (windows10) 上运行良好。但是在 Windows 上的 Ubuntu 上的 Bash,发现termbox.Init()
运行时invalid argument
出现错误。我认为作为一个原因,终端的 tty 可能不是原始模式。但我不知道避免这个问题的原因和方法。
我的问题如下。
- 为什么会出现这个错误?
- 这个问题的解决方案是什么?
Windows 上 Ubuntu 上的 Bash 版本是Ubuntu 16.04.3 LTS
. Go 的版本是 1.8.3。使用时runtime.GOOS
,Windows 上的 Ubuntu 上的 windows DOS 和 Bash分别显示windows
和。linux
脚本
package main
import (
"log"
"os"
"github.com/nsf/termbox-go"
)
func main() {
err := termbox.Init()
if err != nil {
log.Println(err.Error())
os.Exit(1)
}
}
结果
invalid argument
错误位置
这个错误位置是下面的脚本api.go
。
_, err = fcntl(in, syscall.F_SETFL, syscall.O_ASYNC|syscall.O_NONBLOCK)
fcntl()
在termbox.go
.
func fcntl(fd int, cmd int, arg int) (val int, err error) {
r, _, e := syscall.Syscall(syscall.SYS_FCNTL, uintptr(fd), uintptr(cmd),
uintptr(arg))
val = int(r)
if e != 0 {
err = e
}
return
}
我不知道这个职位是否会成为一个解决方案。
非常感谢您的时间和建议。我很抱歉我的不成熟问题。