NCURSES - 在tty模式下打印时错误打印新行

时间:2017-04-28 18:06:04

标签: c ncurses

我有这个程序:

#include <ncurses.h>

SCREEN * sstderr;
SCREEN * sstdout;

int main() {
    sstderr = newterm(NULL, stderr, NULL);
    noecho();
    sstdout = newterm(NULL, stdout, stdin);
    set_term(sstdout);

    addstr("PRESS A KEY");
    getch();
    def_prog_mode();
    endwin();

    system("ls -l");

    getchar();
    reset_prog_mode();
    refresh();
    addstr("Press another key");
    getch();
    set_term(sstdout);
    endwin();
    set_term(sstderr);
    endwin();
}

&#39; ls -l&#39;输出中的每一行命令被错误打印如下:

drwxr-xr-x   2 root root    4096 Feb 11 09:22 bin
                        drwxr-xr-x   3 root root    4096 Mar  6  2016 boot
                                                drwxr-xr-x  18 root root    3380 Feb 23 00:12 dev
                                                                        drwxr-xr-x 113 root root   12288 Apr 25 10:45 etc
...

我尝试在initscr()行(或我的情况下为newterm())之前使用def_shell_mode(),并在system("ls -l");之前使用reset_shell_mode(),但问题仍然存在。 我能解决这个问题的唯一方法就是使用

system("reset");

system("ls -l");行之前。

任何人都知道真正的问题是什么,以及如何在没有它的情况下解决它&#34;重置&#34;调用

谢谢!

1 个答案:

答案 0 :(得分:1)

您的程序将同一个终端初始化为curses模式两次。但是它第一次将终端设置为从熟模式开始的原始模式。第二次它已经处于原始模式。 (很多)那些是单独的流并不重要,但它们连接到相同的终端驱动程序。

初始化第二个屏幕(标准输出),然后执行“恢复”,没有任何反应,因为它恢复到原始模式。

您可以在执行endwin之前切换回标准错误屏幕来“修复”它。另外,您在将shell模式终端设置从一个屏幕复制到另一个屏幕时遇到问题。