Ncurses程序在调整终端大小时退出

4
当我调整终端窗口大小时,下面的程序退出了。为什么?如何阻止它退出?
#include <ncurses.h>
#include <unistd.h>

int main () {
    initscr ();

    printw ("Some text\n");
    refresh ();

    sleep (100);
    endwin ();

    return 0;
}

2
http://www.google.com/search?q=ncurses+resize - Karoly Horvath
2个回答

2
我在这里找到了答案:https://zhuanlan.zhihu.com/p/22496947 当终端大小改变时,会发出SIGWINCH信号并导致程序退出。
以下是解决方案:
#include <ncurses.h>
#include <unistd.h>
#include <signal.h>

int main () {
    initscr ();

    signal (SIGWINCH, NULL);

    printw ("Some text\n");
    refresh ();

    sleep (100);
    endwin ();

    return 0;
}

但是对于一个ncurses程序,您需要实际处理信号以便将布局适应新的终端大小。 - wldsvc
1
它是用答案编写的。 - user1732700

1
您需要处理SIGWINCH信号:
#include <signal.h>

/* resizer handler, called when the user resizes the window */
void resizeHandler(int sig) {
    // update layout, do stuff...
}

int main(int argc, char **argv) {
    signal(SIGWINCH, resizeHandler);

    // play with ncurses
    // ...
}

我会在信号处理程序中只调用异步信号安全的函数。请查看 signal(7) 手册页。通常的方法是仅在信号处理程序中设置 volatile sigatomic_t 标志,在其他地方测试该标志... - Basile Starynkevitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接