delwin(stdscr) 合法吗?
Is delwin(stdscr) legal?
如果合法的话,我退出ncurses的时候应该一直调用吗?还是从endwin()
?自动调用delwin(stdscr)
?
会有什么后果
这是多个问题:
- If it is legal, should I call this always when exiting from ncurses?
- Or is it automatically called from endwin()?
- What are the consequences of doing delwin(stdscr)?
前两个是等价的(在 curses 的任何实现中都不是必需的,endwin
也不是)。那么就称之为两个问题。第一个问 delwin
和 endwin
有什么关系,另一个问 [=54= 的具体行为]delwin
。后者很有趣。
实际上它可能依赖于实现。
将其限制为 ncurses(每个标签),
delwin
调用
_nc_freewin
,调用
remove_window_from_screen
,对每个curscr
、newscr
进行特殊检查和 stdscr
(如果要删除的 window 恰好匹配,则在释放它们各自的数据之前,将这些全局变量的值设置为 NULL)。
所以它适用于 ncurses。我在 December 1996:
中添加了该功能
+ modify _nc_freewin() to reset globals curscr/newscr/stdscr when
freeing the corresponding WINDOW (found using Purify).
关于便携性:
- PDcurses 不会这样做。
- NetBSD does (but see this — from 2006, likely imitating ncurses)
- Solaris SVr4 curses does not, nor does its X/Open (xpg4) 风味。
有两个问题。另一个问候endwin
。这永远不会删除 window,因为总是可以在调用 endwin
之后调用 wrefresh
。它在 manual page:
Calling refresh(3x) or doupdate(3x) after a temporary escape causes the
program to resume visual mode.
但是,如果您在 endwin()
和 wrefresh(stdscr)
调用之间执行了 delwin(stdscr)
, ncurses 会 return 后者的错误。 NetBSD(read the code 看到它将取消引用空指针)和 Solaris 都会转储核心。
如果合法的话,我退出ncurses的时候应该一直调用吗?还是从自动调用endwin()
?delwin(stdscr)
?
这是多个问题:
- If it is legal, should I call this always when exiting from ncurses?
- Or is it automatically called from endwin()?
- What are the consequences of doing delwin(stdscr)?
前两个是等价的(在 curses 的任何实现中都不是必需的,endwin
也不是)。那么就称之为两个问题。第一个问 delwin
和 endwin
有什么关系,另一个问 [=54= 的具体行为]delwin
。后者很有趣。
实际上它可能依赖于实现。
将其限制为 ncurses(每个标签),
delwin
调用_nc_freewin
,调用remove_window_from_screen
,对每个curscr
、newscr
进行特殊检查和stdscr
(如果要删除的 window 恰好匹配,则在释放它们各自的数据之前,将这些全局变量的值设置为 NULL)。
所以它适用于 ncurses。我在 December 1996:
中添加了该功能 + modify _nc_freewin() to reset globals curscr/newscr/stdscr when
freeing the corresponding WINDOW (found using Purify).
关于便携性:
- PDcurses 不会这样做。
- NetBSD does (but see this — from 2006, likely imitating ncurses)
- Solaris SVr4 curses does not, nor does its X/Open (xpg4) 风味。
有两个问题。另一个问候endwin
。这永远不会删除 window,因为总是可以在调用 endwin
之后调用 wrefresh
。它在 manual page:
Calling refresh(3x) or doupdate(3x) after a temporary escape causes the
program to resume visual mode.
但是,如果您在 endwin()
和 wrefresh(stdscr)
调用之间执行了 delwin(stdscr)
, ncurses 会 return 后者的错误。 NetBSD(read the code 看到它将取消引用空指针)和 Solaris 都会转储核心。