我正在写一个终端,并试图将蒸汽机车用作测试床,却遇到了一个异常问题。即使在像xterm或mate-terminal这样的常规终端中,如果您运行应用程序,输出也会有所不同,即sl
与将其记录到文件中即sl > sl.txt
然后将其cat sl.txt
这在sl-h
上特别明显,在最初的几秒钟内,输出代码,这些代码将使铁路道口的X / O出现,如果显示的话,将X / O错误地放在行的开头
似乎正在发生ioctl
,它以某种方式更改了换行符的行为以前进到下一行,但没有返回到开头。即strace sl-h 2> sllog.txt
显示:ioctl(1, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig -icanon echo ...}) = 0
您如何能够将其检测为终端?有什么系统?为什么ncurses不会只使用转义序列来传达此信息?我不确定如何在终端中处理很多问题。
答案 0 :(得分:1)
ncurses(如Unix curses)将终端置于 raw模式有两个原因:
printf
更少的字符。在原始模式下,Unix风格的换行到回车和换行的转换被禁用。这样,ncurses可以使用单个字符直接向下移动一行(在同一列中)。游标寻址通常使用6个或更多字符。甚至光标向下也将使用3个字符。
顺便说一句,对换行符的处理是为什么终端说明通常具有分配给换行符的向下光标功能的原因。