curses庫是一組函數,可以用它來設置光標的位置和終端屏幕上顯示的字符樣式。curses庫將終端屏幕看成是由字符單元組成的網格,每一個單元由(行、列)座標對標示。座標原點是屏幕的左上角,行座標自上而下遞增,列座標自左而右遞增。
這裏介紹幾個常用函數:
initscr() 初始化curses庫和tty
endwin() 關閉curses庫並重置tty
refresh() 使屏幕按照自己的意圖顯示
move(r,s) 移動光標到屏幕的(r,s)位置
addstr(s) 在當前位置畫字符串s
addch(c) 在當前位置畫字符c
clear() 清屏
standout() 啓動standout模式(一般使屏幕反色)
standend() 關閉standout模式
一個簡單的curses庫程序curses1.c:
#include <stdio.h> #include <curses.h> main(){ initscr(); clear(); move(10,20); addstr("Hello,world"); move(LINES-1,0); //LINES是當前終端的行數 refresh(); getch(); endwin(); }
$gcc -o curese curses.c
編譯報錯如下:
error: curses.h: No such file or directory
即缺少curses庫文件,檢查所依賴的軟件包:
$yum provides */curses.h ... ncurses-devel-5.7-3.20090208.el6.x86_64 : Development files for the ncurses : library Repo : server Matched from: Filename : /usr/include/ncurses/curses.h Filename : /usr/include/curses.h Filename : /usr/include/ncursesw/curses.h ...
yum install ncurses-devel -y //安裝該軟件包即可
[root@server1 7]# gcc -o curses1 curses1.c /tmp/cclUPDCB.o: In function `main': curses1.c:(.text+0x5): undefined reference to `initscr' curses1.c:(.text+0xc): undefined reference to `stdscr' curses1.c:(.text+0x14): undefined reference to `wclear' curses1.c:(.text+0x1b): undefined reference to `stdscr' curses1.c:(.text+0x2d): undefined reference to `wmove' curses1.c:(.text+0x34): undefined reference to `stdscr' curses1.c:(.text+0x46): undefined reference to `waddnstr' curses1.c:(.text+0x4c): undefined reference to `LINES' curses1.c:(.text+0x56): undefined reference to `stdscr' curses1.c:(.text+0x65): undefined reference to `wmove' curses1.c:(.text+0x6c): undefined reference to `stdscr' curses1.c:(.text+0x74): undefined reference to `wrefresh' curses1.c:(.text+0x7b): undefined reference to `stdscr' curses1.c:(.text+0x83): undefined reference to `wgetch' curses1.c:(.text+0x88): undefined reference to `endwin' collect2: ld returned 1 exit status
解決辦法是在編譯時加上參數-lncurses
gcc -o curses1 curses1.c -lncurses