linux屏幕編程:curses庫的使用


  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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章