| 论坛注册| 加入收藏 | 设为首页| RSS
Google
您当前的位置:首页 > Linux频道 > Linux开发区 > 软件开发

curses 库介绍之一

时间:2006-08-07 11:08:19  来源:Linux联盟收集  作者:林建宏
 ■ 前言  skxLinux联盟
skxLinux联盟
    相信您在网络上一定用过如 tin,elm 等工具, 这些软体有项共同的特色,skxLinux联盟
    即他们能利用上下左右等方向键来控制光标的位置.  除此之外, 这些程序skxLinux联盟
    的画面也较为美观. 对 Programming 有兴趣的朋友一定对此感到好奇, 也skxLinux联盟
    许他能在 PC 上用 Turbo C 轻易地写出类似的程序, 然而, 但当他将相同skxLinux联盟
    的程序一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误.skxLinux联盟
    其实, 原因很简单, 他使用的函数库可能在 UNIX 上是没有定义的.  有些skxLinux联盟
    在 Turbo-C 上被广泛使用的一些函数, 可能在 UNIX 上是不被定义的.skxLinux联盟
skxLinux联盟
    为了因应网络上各式各样的终端类型  (terminal), UNIX 上特别发展出skxLinux联盟
    一套函数库, 专门用来处理 UNIX 上光标移动及屏幕的显示.  这就是本篇skxLinux联盟
    文章要为您介绍的 - curses.h 函数库.  利用这个函数库, 您也可以写出skxLinux联盟
    像 elm 般利用方向键来移动光棒位置的程序. (CCCA 近来所提供的线上选skxLinux联盟
    课程序, 及程序服务界面, 即是笔者利用 curses 发展而成的 )skxLinux联盟
skxLinux联盟
skxLinux联盟
■ curses 的历史与版本skxLinux联盟
skxLinux联盟
    cureses 最早是由柏克莱大学的 Bill Joy 及 Ken Arnold 所发展出来的.skxLinux联盟
    当时发展此一函数库主要原因是为了提高程序对不同终端的相容性而设skxLinux联盟
    计的.  因此, 利用 curses  发展出来的程序将和您所使用的终端无关.skxLinux联盟
    也就是说, 您不必担心您的程序因为换了一部终端而无法使用.  这对程skxLinux联盟
    序设计者而言,    尤其是网络上程序的撰写,    是件相当重要的一件事.skxLinux联盟
    curses之所以能对上百种以上的终端工作,  是因为它将所有终端的资skxLinux联盟
    料, 存放在一个叫 termcap 的资料库, ( 而在第二版的 System V 系统中skxLinux联盟
    , 新版的 curses 以 terminfo 取代原来的 termcap). 有了这些记录, 程skxLinux联盟
    式就能够知道遇到哪一种终端时,   须送什麽字元才能移动光标的位置,skxLinux联盟
    送什麽字元才能清除整个屏幕清除. (* 注一)skxLinux联盟
skxLinux联盟
    另外, 本文的介绍 以 System V 的 curses 版本为主.skxLinux联盟
skxLinux联盟
skxLinux联盟
■ 如何在您的程序使用 curses ?skxLinux联盟
skxLinux联盟
    在您的 C 程序的档头将  <curses.h> include 进来.当您引进  curses.hskxLinux联盟
    这个函数库後, 系统会自动将 <stdio.h> 和 <unctl.h>一并  include 进skxLinux联盟
    来.另外,  在  System  V  版本中, <terminfo.h>  这个函数库也将一并skxLinux联盟
    include进来.skxLinux联盟
skxLinux联盟
     #include <curses.h>skxLinux联盟
skxLinux联盟
     main()skxLinux联盟
     {skxLinux联盟
      :  :skxLinux联盟
      :  :skxLinux联盟
     }skxLinux联盟
skxLinux联盟
    当然, 您的系统内必须放有 curses.h 这个函数库.skxLinux联盟
skxLinux联盟
skxLinux联盟
■ 如何编译(compile)skxLinux联盟
skxLinux联盟
    当您编辑好您的程序, 在 UNIX 提示符号下键入:skxLinux联盟
skxLinux联盟
      % /usr/5bin/cc [file.c] -lcursesskxLinux联盟
                               ^^^^^^^skxLinux联盟
                               引进 curses.h 这个 libraryskxLinux联盟
skxLinux联盟
    或 % /usr/5bin/cc [file.c] -lcurses -ltermlibskxLinux联盟
skxLinux联盟
      (*注二)skxLinux联盟
skxLinux联盟
skxLinux联盟
■ 如何开始我的第一个 curses 程序?skxLinux联盟
skxLinux联盟
    在开始使用 curses 的一切命令之前, 您必须先利用  initscr()这个函数skxLinux联盟
    来开启 curses 模式.skxLinux联盟
skxLinux联盟
    相对的, 在结束  curses  模式前  ( 通常在您结束程序前  )  也必须以skxLinux联盟
    endwin()来关闭 curses 模式.skxLinux联盟
skxLinux联盟
     #include <curses.h>skxLinux联盟
skxLinux联盟
     main()skxLinux联盟
     {skxLinux联盟
       initscr();skxLinux联盟
       :  :skxLinux联盟
       :  :skxLinux联盟
       :  :skxLinux联盟
       endwin();skxLinux联盟
     }skxLinux联盟
skxLinux联盟
    这是一般 curses 程序标准的模式.skxLinux联盟
skxLinux联盟
    此外, 您可以就您程序所须, 而做不同的设定. 当然, 您可以不做设定,而skxLinux联盟
    只是呼叫 initscr().skxLinux联盟
skxLinux联盟
    您可以自己写一个函数来存放所有您所须要的设定.  平常使用时, 只要呼skxLinux联盟
    叫这个函数即可启动 curses 并完成一切设定.skxLinux联盟
skxLinux联盟
    下面的例子, 即是笔者将平常较常用的一些设定放在一个叫 initial()的函skxLinux联盟
    式内.skxLinux联盟
skxLinux联盟
      void initial()skxLinux联盟
     {skxLinux联盟
       initscr();skxLinux联盟
       cbreak();skxLinux联盟
       nonl();skxLinux联盟
       noecho();skxLinux联盟
       intrflush(stdscr,FALSE);skxLinux联盟
       keypad(stdscr,TRUE);skxLinux联盟
       refresh();skxLinux联盟
      }skxLinux联盟
skxLinux联盟
skxLinux联盟
   各函数分别介绍如下:skxLinux联盟
skxLinux联盟
     □ initscr()skxLinux联盟
skxLinux联盟
          initscr()  是一般 curses 程序必须先呼叫的函数, 一但这个函数skxLinux联盟
          被呼叫之後, 系统将根据终端的形态并启动 curses 模式.skxLinux联盟
skxLinux联盟
skxLinux联盟
     □ endwin()skxLinux联盟
skxLinux联盟
          curses 通常以呼叫 endwin() 来结束程序.  endwin() 可用来关闭skxLinux联盟
          curses 模式, 或是暂时的跳离  curses 模式.如果您在程序中须要skxLinux联盟
          call shell ( 如呼叫 system() 函数 ) 或是需要做 system call,skxLinux联盟
          就必须先以   endwin()   暂时跳离   curses  模式.   最後再以skxLinux联盟
          wrefresh() doupdate() 来重返 curses 模式.skxLinux联盟
skxLinux联盟
skxLinux联盟
     □ cbreak()skxLinux联盟
        nocbreak()skxLinux联盟
skxLinux联盟
          当 cbreak  模式被开启後, 除了 DELETE 或 CTRL 等仍被视为特殊skxLinux联盟
          控制字元外一切输入的字元将立刻被一一读取.当处於 nocbreak 模skxLinux联盟
          式时, 从键盘输入的字元将被储存在  buffer 里直到输入  RETURNskxLinux联盟
          或 NEWLINE.在较旧版的 curses 须呼叫 crmode(),nocrmode() 来skxLinux联盟
          取代 cbreak(),nocbreak()skxLinux联盟
skxLinux联盟
skxLinux联盟
     □ nl()skxLinux联盟
        nonl()skxLinux联盟
skxLinux联盟
          用来决定当输入资料时, 按下 RETURN 键是否被对应为 NEWLINE 字skxLinux联盟
          元 ( 如 \n ).skxLinux联盟
          而输出资料时, NEWLINE  字元是否被对应为  RETURN 和 LINDFEEDskxLinux联盟
          系统预设是开启的.skxLinux联盟
skxLinux联盟
skxLinux联盟
skxLinux联盟
     □ echo()skxLinux联盟
        noecho()skxLinux联盟
skxLinux联盟
          此函数用来控制从键盘输入字元时是否将字元显示在终端上.系统skxLinux联盟
          预设是开启的.skxLinux联盟
skxLinux联盟
skxLinux联盟
     □ intrflush(win,bf)skxLinux联盟
skxLinux联盟
          呼叫 intrflush 时须传入两个值:skxLinux联盟
          win 为一 WINDOW 型态指标, 通常传入标准输出入屏幕 stdscrskxLinux联盟
          bf 为 TRUE 或 FALSEskxLinux联盟
skxLinux联盟
          当 bf 为 true 时, 当输入中断字元 ( 如 break) 时, 中断的反应skxLinux联盟
          将较为快速.但可能会造成屏幕的错乱.skxLinux联盟
skxLinux联盟
skxLinux联盟
skxLinux联盟
      □ keypad(win,bf)skxLinux联盟
skxLinux联盟
          呼叫 keypad 时须传入两个值:skxLinux联盟
          win 为一 WINDOW 型态指标, 通常传入标准输出入屏幕 stdscrskxLinux联盟
          bf 为 TRUE 或 FALSEskxLinux联盟
skxLinux联盟
          当开启  keypad 後, 可以使用键盘上的一些特殊字元, 如上下左右skxLinux联盟
          等方向键, curses 会将这些特殊字元转换成 curses.h 内定义的一skxLinux联盟
          些特殊键. 这些定义的特殊键通常以 KEY_ 开头.skxLinux联盟
skxLinux联盟
skxLinux联盟
skxLinux联盟
      □ refresh()skxLinux联盟
skxLinux联盟
          refresh() 为 curses 最常呼叫的一个函数.skxLinux联盟
skxLinux联盟
          curses 为了使屏幕输出入达最佳化, 当您呼叫屏幕输出函数企图改skxLinux联盟
          变屏幕上的画面时, curses  并不会立刻对屏幕做改变,  而是等到skxLinux联盟
          refresh() 呼叫後, 才将刚才所做的变动一次完成.  其馀的资料将skxLinux联盟
          维持不变. 以尽可能送最少的字元至屏幕上. 减少屏幕重绘的时间.skxLinux联盟
          如果是 initscr() 後第一次呼叫  refresh(), curses 将做清除萤skxLinux联盟
          幕的工作.skxLinux联盟
skxLinux联盟
skxLinux联盟
skxLinux联盟
skxLinux联盟
■ 光标的控制skxLinux联盟
skxLinux联盟
       move(y,x)       将光标移动至 x,y 的位置skxLinux联盟
       getyx(win,y,x)  得到目前光标的位置skxLinux联盟
                       (请注意! 是 y,x 而不是 &y,&x )skxLinux联盟
skxLinux联盟
skxLinux联盟
■ 有关清除屏幕的函数skxLinux联盟
skxLinux联盟
           clear()skxLinux联盟
           erase()   将整个屏幕清除skxLinux联盟
                     (请注意配合refresh() 使用)skxLinux联盟
skxLinux联盟
skxLinux联盟
■ 如何在屏幕上显示字元skxLinux联盟
skxLinux联盟
     echochar(ch)              显示某个字元skxLinux联盟
skxLinux联盟
     addch(ch)                 显示某个字元skxLinux联盟
     mvaddch(y,x,ch)           在(x,y) 上显示某个字元skxLinux联盟
                               相当於呼叫 move(y,x);addch(ch);skxLinux联盟
skxLinux联盟
     addstr(str)               显示一串字串skxLinux联盟
     mvaddstr(y,x,str)         在(x,y) 上显示一串字串skxLinux联盟
                               相当於呼叫 move(y,x);addstr(str);skxLinux联盟
skxLinux联盟
     printw(format,str)        类似 printf() , 以一定的格式输出至屏幕skxLinux联盟
     mvprintw(y,x,format,str)  在(x,y) 位置上做 printw 的工作.skxLinux联盟
                               相当於呼叫 move(y,x);printw(format,str);skxLinux联盟
skxLinux联盟
skxLinux联盟
■ 如何从键盘上读取字元skxLinux联盟
skxLinux联盟
      getch()                        从键盘读取一个字元 (注意! 传回的是整数值)skxLinux联盟
      getstr()                       从键盘读取一串字元skxLinux联盟
      scanw(format,&arg1,&arg2...)   如同 scanf, 从键盘读取一串字元skxLinux联盟
skxLinux联盟
      □例:skxLinux联盟
skxLinux联盟
      int ch;skxLinux联盟
      char string1[80];   /* 请注意! 不可宣告为 char *string1; */skxLinux联盟
      char string2[80];skxLinux联盟
skxLinux联盟
      echo();            /* 开启 echo 模式, 使输入立刻显示在屏幕上 */skxLinux联盟
      ch=getch();skxLinux联盟
      string1=getstr();skxLinux联盟
      scanw("%s",string2);skxLinux联盟
      mvprintw(10,10,"String1=%s",string1);skxLinux联盟
      mvprintw(11,10,"String2=%s",string2);skxLinux联盟
skxLinux联盟
■ 如何利用方向键skxLinux联盟
skxLinux联盟
    curses 将一些如方向键等特殊控制字元, 以 KEY_ 为开头定义在 curses.hskxLinux联盟
    这个档案里头, 如 KEY_UP  即代表方向键的  " ↑ ".  但, 如果您想使用skxLinux联盟
    curses.h  所为您定义的这些特殊键的话,  您就必须将   keypad  设定为skxLinux联盟
    TRUE. 否则, 您就必须自己为所有的特殊键定义了.skxLinux联盟
skxLinux联盟
   curses.h 为一些特殊键的定义如下:skxLinux联盟
skxLinux联盟
     KEY_UP          0403           ↑skxLinux联盟
     KEY_DOWN        0402           ↓skxLinux联盟
     KEY_LEFT        0404           ←skxLinux联盟
     KEY_RIGHT       0405           →skxLinux联盟
     KEY_HOME        0406           Home key (upward+left arrow)skxLinux联盟
     KEY_BACKSPACE   0407           backspace (unreliable)skxLinux联盟
     KEY_F0          0410           Function keys.skxLinux联盟
     KEY_F(n)        (KEY_F0+(n))   Formula for f .skxLinux联盟
     KEY_NPAGE       0522           Next pageskxLinux联盟
     KEY_PPAGE       0523           Previous pageskxLinux联盟
skxLinux联盟
    以上仅列出笔者较常使用的一些控制键, 至於其他控制键的定义, 请自行参skxLinux联盟
    阅 man curses (* 注三)skxLinux联盟
skxLinux联盟
    一并为您列出其他常用的一些特殊字元skxLinux联盟
skxLinux联盟
     [TAB]                 /tskxLinux联盟
     [ENTER]               /rskxLinux联盟
     [ESC]                 27skxLinux联盟
     [BACKSPACE]           127skxLinux联盟
skxLinux联盟
skxLinux联盟
  ■ 如何改变屏幕显示字元的属性skxLinux联盟
skxLinux联盟
    为了使输出的屏幕画面更为生动美丽,  我们常须要在屏幕上做一些如反白,skxLinux联盟
    闪烁等变化.  curses 定义了一些特殊的属性, 透过这些定义, 我们也可以skxLinux联盟
    在 curses 程序□控制屏幕的输出变化.skxLinux联盟
skxLinux联盟
     attron(mod)    开启属性skxLinux联盟
     attroff(mod)   关闭属性skxLinux联盟
skxLinux联盟
    curses.h 里头定义了一些属性, 如:skxLinux联盟
skxLinux联盟
     A_UNDERLINE    加底线skxLinux联盟
     A_REVERSE      反白skxLinux联盟
     A_BLINK        闪烁skxLinux联盟
     A_BOLD         高亮度skxLinux联盟
     A_NORMAL       标准模式 (只能配合 attrset() 使用)skxLinux联盟
skxLinux联盟
skxLinux联盟
    当使用 attron() 开启某一种特殊属性模式後, 接下来在屏幕的输出都会以skxLinux联盟
    该种属性出现. 直到您呼叫 attroff() 将此模式关闭.skxLinux联盟
skxLinux联盟
    请注意, 当您欲 attron() 开启另一种属性时, 请记得利用 attroff()先关skxLinux联盟
    闭原来的属性, 或直接以 attrset(A_NORMAL)  将所有特殊属性关闭.否则,skxLinux联盟
    curses 会将两种属性做重叠处理.skxLinux联盟
skxLinux联盟
     □例:skxLinux联盟
skxLinux联盟
        attrset(A_NORMAL);            /* 先将属性设定为正常模式       */skxLinux联盟
        attron(A_UNDERLINE);          /* 加底线                       */skxLinux联盟
        mvaddstr(9,10,"加底线");      /* 加底线输出一串字元           */skxLinux联盟
        attroff(A_UNDERLINE);         /* 关闭加底线模式, 恢复正常模式 */skxLinux联盟
        attron(A_REVERSE);            /* 开启反白模式                 */skxLinux联盟
        mvaddstr(10,10,"反白");       /* 输出一串反白字元             */skxLinux联盟
        attroff(A_REVERSE);           /* 关闭反白模式, 恢复正常模式   */skxLinux联盟
        attron(A_BLINK);              /* 开启闪烁模式                 */skxLinux联盟
        mvaddstr(11,10,"闪烁");       /* 输出一串闪烁字元             */skxLinux联盟
        attroff(A_BLINK);             /* 关闭闪烁模式, 恢复正常模式   */skxLinux联盟
        attron(A_BOLD);               /* 开启高亮度模式               */skxLinux联盟
        mvaddstr(12,10,"高亮度");     /* 输出一串高亮度字元           */skxLinux联盟
        attroff(A_BOLD);              /* 关闭高亮度模式, 恢复正常模式 */skxLinux联盟
skxLinux联盟
skxLinux联盟
  ■ 其他常用的一些函数skxLinux联盟
skxLinux联盟
       beep()              发出一声哔声skxLinux联盟
       box(win,ch1,ch2)    自动画方框  ch1: 画方框时垂直方向所用字元skxLinux联盟
                                       ch2: 画方框时水平方向所用字元skxLinux联盟
skxLinux联盟
                                       example: box(stdscr,'|','-');skxLinux联盟
                                       将以 | 及 - 围成一个方框skxLinux联盟
skxLinux联盟
■ 应用完整□例skxLinux联盟
skxLinux联盟
    下面所举的例子,  即完全利用刚刚所介绍的含式来完成.这个程序可将从键skxLinux联盟
    盘上读取的字元显示在屏幕上, 并且可以上下左右方向键来控制光标的位置skxLinux联盟
    , 当按下 [ESC] 後, 程序即结束.skxLinux联盟
skxLinux联盟
    您有没有发现, 这不就是一个简单全屏幕编辑器的雏形吗?skxLinux联盟
skxLinux联盟
skxLinux联盟
   #include <curses.h>                  /* 引进 curses.h , 并自动引进 stdio.h */skxLinux联盟
skxLinux联盟
skxLinux联盟
   #define StartX  1                    /* 决定光标初始位置 */skxLinux联盟
   #define StartY  1skxLinux联盟
skxLinux联盟
   void initial();skxLinux联盟
skxLinux联盟
   main()skxLinux联盟
   {skxLinux联盟
      int x=StartX;                     /* 宣告 x,y 并设定其初值              */skxLinux联盟
skxLinux联盟
      int y=StartY;skxLinux联盟
      int ch;                           /* 宣告 ch 为整数,配合 getch() 使用   */skxLinux联盟
skxLinux联盟
skxLinux联盟
      initial();                        /* 呼叫 initial(), 启动 curses 模式,  */skxLinux联盟
skxLinux联盟
                                        /* 并完成其它设定                     */skxLinux联盟
skxLinux联盟
skxLinux联盟
      box(stdscr,'|','-');              /* 画方框                             */skxLinux联盟
skxLinux联盟
skxLinux联盟
      attron(A_REVERSE);                /* 开启反白模式                       */skxLinux联盟
skxLinux联盟
      mvaddstr(0,20,"Curses Program");  /* 在 (20,0) 处输出反白字元           */skxLinux联盟
skxLinux联盟
      attroff(A_REVERSE);               /* 关闭反白模式                       */skxLinux联盟
skxLinux联盟
skxLinux联盟
      move(x,y);                        /* 将光标移至初始位置                 */skxLinux联盟
skxLinux联盟
skxLinux联盟
      do {                              /* 以无限回圈不断等待输入             */skxLinux联盟
skxLinux联盟
       ch=getch();                      /* 等待自键盘输入字元skxLinux联盟
       switch(ch) {                     /* 判断输入字元为何                   */skxLinux联盟
skxLinux联盟
skxLinux联盟
          case KEY_UP: --y;             /* 判断是否"↑"键被按下               */skxLinux联盟
skxLinux联盟
                       break;skxLinux联盟
          case KEY_DOWN: ++y;           /* 判断是否"↓"键被按下               */skxLinux联盟
skxLinux联盟
                       break;skxLinux联盟
          case KEY_RIGHT: ++x;          /* 判断是否"→"键被按下               */skxLinux联盟
skxLinux联盟
                       break;skxLinux联盟
          case KEY_LEFT: --x;           /* 判断是否"←"键被按下               */skxLinux联盟
skxLinux联盟
                       break;skxLinux联盟
          case '\r':                    /* 判断是否 ENTER 键被按下            */skxLinux联盟
skxLinux联盟
                    ++y;skxLinux联盟
                    x=0;skxLinux联盟
                    break;skxLinux联盟
          case '\t':                    /* 判断是否 TAB 键被按下              */skxLinux联盟
skxLinux联盟
                    x+=7;skxLinux联盟
                    break;skxLinux联盟
          case 127:                     /* 判断是否 BACKSPACE 键被按下        */skxLinux联盟
skxLinux联盟
                     mvaddch(y,--x,' ');/* delete 一个字元                    */skxLinux联盟
skxLinux联盟
                     break;skxLinux联盟
skxLinux联盟
          case 27: endwin();            /* 判断是否[ESC]键被按下              */skxLinux联盟
skxLinux联盟
                   exit(1);             /* 结束 curses 模式                   */skxLinux联盟
skxLinux联盟
                                        /* 结束此程序                         */skxLinux联盟
skxLinux联盟
skxLinux联盟
          default:skxLinux联盟
                   addch(ch);           /* 如果不是特殊字元, 将此字元印出     */skxLinux联盟
skxLinux联盟
                   x++;skxLinux联盟
                   break;skxLinux联盟
        }skxLinux联盟
        move(y,x);                      /* 移动光标至现在位置                 */skxLinux联盟
skxLinux联盟
      } while (1);skxLinux联盟
    }skxLinux联盟
skxLinux联盟
   void initial()                       /* 自定开启 curses 函数               */skxLinux联盟
skxLinux联盟
   {skxLinux联盟
       initscr();skxLinux联盟
       cbreak();skxLinux联盟
       nonl();skxLinux联盟
       noecho();skxLinux联盟
       intrflush(stdscr,FALSE);skxLinux联盟
       keypad(stdscr,TRUE);skxLinux联盟
       refresh();skxLinux联盟
    }skxLinux联盟
skxLinux联盟
skxLinux联盟
skxLinux联盟
  ■ 後记skxLinux联盟
skxLinux联盟
    学完了上述的一些命令,  相不相信您已经可以写出一个漂亮的全屏幕编辑skxLinux联盟
    器了? 事实上, curses 提供的函数不下  200 个, 可是笔者认为, 一切再skxLinux联盟
    复杂的函数都可以用本文提到的一些组合变化而成,  学了太多的函数, 只skxLinux联盟
    是徒增自己困扰罢了.  当然,  如果您对其它函数有兴趣,  可以自行参阅skxLinux联盟
    curses 说明档.  ( 方法: % man curses ) 本文不过行抛砖引玉之效, 也skxLinux联盟
    希望未来能陆续出现更多同学自行创作的程序.skxLinux联盟
skxLinux联盟
     * 任何疑问及建议, 欢迎 e-mail 至 ljh@CCCA.NCTU.edu.tw. 谢谢 ! *skxLinux联盟
skxLinux联盟
skxLinux联盟
skxLinux联盟
注一:skxLinux联盟
     请参考 /usr/share/lib/termcupskxLinux联盟
            /usr/share/lib/terminfo/s/sunskxLinux联盟
skxLinux联盟
注二:skxLinux联盟
     1.如果是 BSD 的版本, 需使用skxLinux联盟
       cc [file.c] -lcurses -ltermcap 来完成 compile.skxLinux联盟
     2.计中工作站不知何故将原来的 /usr/5bin/cc 更改为 /usr/5bin/cc.orgskxLinux联盟
       因此, 您若想在计中工作站 compile curses 程序.需以 /usr/5bin/cc.orgskxLinux联盟
       取代 /usr/5bin/cc , 否则 compile 可能发生错误.skxLinux联盟
     3.较旧版的 curses 需同时引进 curses 和 termlib 这两个 library,skxLinux联盟
       因此, 您必须使用 /usr/5bin/cc [file.c] -lcurses -ltermlib 来 compile.skxLinux联盟
skxLinux联盟
注三:skxLinux联盟
      根据笔者的经验, 上下左右方向键应可正常使用而不会发生问题, 但其它skxLinux联盟
      如 PgUp,PgDn,功能键,Home,End 等特殊键, 很容易因机器, 键盘不同而无skxLinux联盟
      法使用, 因此, 若您的程序须要在不同的机器上使用, 建议您只用方向键来skxLinux联盟
      控制, 其它的特殊键少用为妙.skxLinux联盟
      至於 PgUp,PgDn 一些特殊键的控制方法, 由於较为复杂, 有兴趣的同学可参skxLinux联盟
      考 tin 原始程序 curses.c 内所使用的一些方法.skxLinux联盟
来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
    无相关信息
栏目更新
栏目热门