next up previous contents
下一节: 8.4 初始化 上一级: 8 字符单元图形 前一节: 字符串功能

8.3 Ncurses - 简介

本章将使用以下术语

通常,使用 ncurses 库的程序看起来像这样

#include 
...
main()
{
  ...
  initscr();
  /* ncurses function calls */
  endwin();
  ...
}

包含 .h 将定义 ncurses 的变量和类型,例如 WINDOW 和函数原型。它会自动包含 。h、。h、。h 和 。h。

initscr() 用于初始化 ncurses 数据结构并读取正确的 terminfo 文件。将为 和 分配内存。如果发生错误,initscr 将返回 ERR,否则将返回指向 的指针。此外,屏幕将被擦除,并且 和 将被初始化。

endwin() 将清理 ncurses 分配的所有资源,并将 tty 模式恢复到调用 initscr() 之前的状态。它必须在 ncurses 库的任何其他函数之前调用,并且 endwin() 必须在您的程序退出之前调用。当您想要输出到多个终端时,您可以使用 newterm(...) 代替 initscr()

使用以下命令编译程序

在标志中,您可以包含任何您喜欢的内容 (gcc(1))。由于 ncurses.h 的路径已更改,您必须包含以下行

否则,将找不到 ncurses.h、nterm.h、termcap.h 和 unctrl.h。Linux 的其他可能标志是

2 告诉 gcc 进行一些优化,-ansi 用于 ansi 兼容的 c 代码,-Wall 将打印出所有警告,-m486 将使用针对 Intel 486 优化的代码(二进制文件也可以在 Intel 386 上使用)。

ncurses 库可以在 /usr/lib/ 中找到。ncurses 库有三个版本

屏幕的数据结构称为窗口,如 .h 中定义。窗口类似于内存中的字符数组,程序员可以操作它而无需输出到终端。默认窗口的大小与终端的大小相同。您可以使用 newwin(...) 创建其他窗口。

为了最佳地更新物理终端,ncurses 声明了另一个窗口,。这是终端实际外观的图像,而 是终端应有外观的图像。当您调用 refresh() 时,将完成输出。然后,Ncurses 将使用 中的信息更新 和物理终端。库函数将使用内部优化进行更新过程,因此您可以更改不同的窗口,然后在最优化方式下一次更新屏幕。

使用 ncurses 函数,您可以操作数据结构窗口。以 w 开头的函数允许您指定一个窗口,而其他函数通常会影响 。以 mv 开头的函数将首先将光标移动到位置 y,x

字符的类型为 chtype,它是 long unsigned int,用于存储有关它的其他信息(属性等)。

Ncurses 使用 数据库。通常,数据库位于 /lib/terminfo/ 中,ncurses 将在那里查找本地终端定义。如果您想测试终端的其他一些定义而不更改原始 terminfo,请设置环境变量 。Ncurses 将检查此变量并使用存储在那里的定义而不是 /usr/lib/terminfo/。

当前 ncurses 版本为 1.8.6 ()。

在本章末尾,您可以找到一个表格,其中概述了 BSD-Curses、ncurses 和 Sun-OS 5.4 的 curses。当您想查找特定函数及其实现位置时,请参考它。


next up previous contents
下一节: 8.4 初始化 上一级: 8 字符单元图形 前一节: 字符串功能

转换于
Fri Mar 29 14:43:04 EST 1996