在 Linux 中,要使用 getch 等函数,必须使用 curses 库,在 gcc 编译是用 -l curses 加进这个库。
要调用 getch ,程序初始化时应当调用 initscr,否则将出现误。程序结束时,要调用 endwind。
curs_initscr(3X) curs_initscr(3X)
名称
initscr, newterm, endwin, isendwin, set_term, delscreen - curses screen
initialization and manipulation routines
概要
#include <curses.h>
WINDOW *initscr(void);
int endwin(void);
bool isendwin(void);
SCREEN *newterm(char *type, FILE *outfd, FILE *infd);
SCREEN *set_term(SCREEN *new);
void delscreen(SCREEN* sp);
描述
程序始初化时,一般应当首先调用 initscr 函数。某些时候,有少量函数要在 initscr 之前调用:slk_init, filter, ripoffline, use_env。对于多终端的应用程序,还要在 initscr 之前调用 newterm。
initscr 确定终端类型,并初始化数据结构。它调用 refresh 清屏。initscr 发生错误时,在标准错误流中记录错误消息并退出,否则,将一个指针设置到 stdscr。
输出到多个终端的程序应当为每个终端调用 newterm 一次,不要用 initscr。如果终端不支持面向屏幕的程序,程序想要在面向行的模式下继续运行,则也要用 newterm 来实现检查的能力。 它返回 SCREEN* 类型的变量,应当保存作为对该终端的引用。参数 type 是代替 $TERM 的终端的类型,outfd 是输出到该终端的文件指针,infd 是从该终端输入的文件指针(如果 type 是 NULL,将使用 $TERM)。在从 curses 退出时,程序必须为每个终端调用 endwin。如果对同一个终端多次调用 newterm,引用的第一个终端必须是 endwin 的最后一个终端。
在退出或临时切换出 curses 模式之间, 都应当调用 endwin。它恢复 tty 模式,将光标移到屏幕左边,并使终端重新进行适当的不可见模式。在临时切换后调用 refresh 或 doupdate,程序重新回到可见模式。
如果调用了 endwin,以后没有调用 wrefresh,则 isendwind 返回 TRUE,否则返回 FALSE。
set_term 用于在不同的终端之间切换,新的屏幕引用成为新的当前终端,并返回前一个终端。这是操作 SCREEN 指针的唯一函数,其他函数只影响当前终端。
delscreen 释放 SCREEN 数据结构联结的存储空间。endwin 没有这个作用,因此如果不再需要 SCREEN,则在 endwin 之后应当调用 delscreen。
返回值
endwin 失败时返回整数 ERR,成功时返回 OK。
返回指针的函数在出错时都返回 NULL。.
注意:initscr 和 newterm 可能是宏。
可移植性
这些函数用 XSI Curses 标准第4版描述,它指出可移植的应用程序不能多次调用 initscr。
curses 的旧版,如 BSD 4.4,initscr 出错时可能返回一个空指针,而不是退出。在 XSI Curses 中,检查 initscr 的返回值安全的,但是多此一举。
参阅
curses(3X), curs_kernel(3X), curs_refresh(3X), curs_slk(3X),
curs_util(3X)