• 首页
  • 搜索
  • 工具
  • 分类
  • 日志
  • 友链
  • 图片

It's Geek KingYoungy

KEEP CHALLENGE

ncurses库的使用总结

2025-03-06 浏览量 113 暂无评论

ncurses库的使用总结


前言

ncurses(new curses)是一个程序库,它提供的API可以允许程序员编写独立于终端的基于文本的用户界面。它是一个虚拟终端中的“类GUI”应用软件工具箱。它还优化了屏幕刷新方法,以减少使用远程shell时遇到的延迟。


一、环境初始化函数

  1. WINDOW *initscr(void)
    • 参数:无
    • 返回值:返回标准窗口stdscr的指针;失败返回NULL。
    • 作用:初始化终端进入curses模式,必须在其他ncurses函数前调用。
    • 使用注意:每个程序只能调用一次,需与endwin()配对。
  2. int endwin(void)
    • 参数:无
    • 返回值:成功返回OK,失败返回ERR。
    • 作用:释放ncurses资源,恢复终端原始状态。需在程序退出前调用。

    // 示例:初始化与退出
    initscr();
    // ...其他操作...
    endwin();
  3. 信号处理(非函数原型,但关键)
    • 使用场景:防止程序异常终止导致终端显示异常。
    • 示例:

    #include <signal.h>
    void sig_handler(int signo) { endwin(); exit(0); }
    signal(SIGINT, sig_handler);  // 处理Ctrl+C

二、输入模式控制

  1. int raw(void) / int cbreak(void)
    • 参数:无
    • 返回值:成功返回OK,失败返回ERR。
    • 区别:
    ◦ raw():禁用行缓冲和信号处理(如Ctrl+C会直接传递为输入字符)。
    ◦ cbreak():禁用行缓冲但保留信号处理。
  2. int echo(void) / int noecho(void)
    • 参数:无
    • 作用:控制输入回显,noecho()常用于密码输入等场景。
  3. int keypad(WINDOW *win, bool bf)
    • 参数:
    ◦ win:目标窗口(通常为stdscr)。
    ◦ bf:TRUE启用功能键(如方向键/F1-F12),FALSE禁用。
    • 返回值:成功返回OK,失败返回ERR。
  4. int halfdelay(int tenths)
    • 参数:tenths为等待输入的0.1秒倍数(1-255)。
    • 作用:设置输入超时,超时后返回ERR。

三、屏幕输出与光标控制

  1. 基础输出函数
    • int addch(chtype ch)
    ◦ 参数:ch为字符(可组合属性,如ch | A_BOLD)。
    • int printw(const char *fmt, ...)
    ◦ 参数:类似printf,支持格式化字符串。
    • int addstr(const char *str)
    ◦ 参数:直接输出完整字符串。
  2. 光标移动函数
    • int move(int y, int x)
    ◦ 参数:目标坐标(y, x)(行、列)。
    ◦ 返回值:成功返回OK,失败返回ERR。
    • mvaddch(int y, int x, chtype ch)
    ◦ 等效操作:move(y, x); addch(ch);。
  3. 屏幕刷新与清空
    • int refresh(void):将stdscr的内容刷新到物理屏幕。
    • int erase(void):清空stdscr内容,不重置光标。
    • int clear(void):清屏并重置光标到(0,0)。

四、窗口管理

  1. 窗口创建与销毁
    • WINDOW *newwin(int nlines, int ncols, int y, int x)
    ◦ 参数:窗口行数、列数、起始坐标(y, x)。
    ◦ 返回值:新窗口指针。
    • int delwin(WINDOW *win)
    ◦ 注意:需先销毁子窗口再销毁父窗口。
  2. 窗口操作
    • int wrefresh(WINDOW *win):刷新指定窗口到屏幕。
    • int box(WINDOW *win, chtype verch, chtype horch)
    ◦ 参数:verch为垂直边框字符,horch为水平边框字符。

五、输入处理

  1. 字符输入
    • int getch(void)
    ◦ 返回值:阻塞模式下等待输入,返回字符或功能键宏(如KEY_LEFT)。
    • int nodelay(WINDOW *win, bool bf)
    ◦ 参数:bf为TRUE时进入非阻塞模式(无输入返回ERR)。
  2. 坐标获取宏
    • getyx(WINDOW *win, int y, int x)
    ◦ 作用:获取窗口当前光标坐标(y和x需为变量地址)。
    • getmaxyx(WINDOW *win, int y, int x)
    ◦ 作用:获取窗口最大行数和列数。

六、最佳实践示例

#include <ncurses.h>
#include <signal.h>

void sig_handler(int signo) { endwin(); exit(0); }

int main() {
    initscr();
    signal(SIGINT, sig_handler);
    cbreak();
    noecho();
    keypad(stdscr, TRUE);

    printw("Press F1 to exit");
    int ch = getch();
    if (ch == KEY_F(1)) {
        endwin();
        return 0;
    }

    endwin();
}

以上内容综合了多个文档来源,具体函数细节可参考官方手册或相关示例。

System V 消息队列总结
深入理解pthread互斥量与条件变量的使用

评论

  • 文章目录
  • 站点概览
    author

    38 日志
    7 分类
    Creative Commons
    • 热门文章
    • 热评文章
    • 随机文章
    • 在 Debian 服务器上部署 FileBrowser 并集成到现有博客路径
    • 高等数学重要定义整理
    • 高等数学重要定理总结
    • C语言原子量的使用
    • 库、链接与执行
    • 欢迎使用 Typecho
    • 对底层IO的深度总结
    • 数据结构——树
    • 库、链接与执行
    • shell作业控制的两个问题:组长叛变与SIGHUP信号
    • 使用GDB调试程序的完整指南
    • shell作业控制的两个问题:组长叛变与SIGHUP信号
    • C语言可变参数与命令行参数解析:stdarg与getopt详解
    • DNS(IP)与服务名(端口)解析
    • System V 信号量与共享内存技术解析

    浏览量 : 5448

    © 2025 It's Geek KingYoungy. Power By Typecho . Theme by Shiyi

    浙ICP备2025160639号  |  浙公网安备33020502001222号

    This is just a placeholder img.