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          //安装该软件包即可

[[email protected] 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

时间: 2024-10-03 04:21:22

linux屏幕编程:curses库的使用的相关文章

linux 高级编程之库的使用

静态库: .a .lib 动态库: .so .dll 差别(静态库中的代码在链接时就已经复制到可执行文件中,执行时不再依赖库,不会自动使用升级后的库,需要重新产生可执行文件. 动态库代码不在可执行文件中,执行时自动加载,库升级后,可执行文件会自动执行时会自动使用库.还有就是代码量的大小) ar -r libstr.a string.o i2str.o 打包 ? 总结: 静态库: 产生库:写若干个c文件(函数或者全局变量,不应该有main),编译(gcc -c ),打包成库(ar -r libxx

嵌入式 Linux系统编程(三)——标准IO库

嵌入式 Linux系统编程(三)--标准IO库 与文件IO函数相类似,标准IO库中提供的是fopen.fclose.fread.fwrite等面向流对象的IO函数,这些函数在实现时本身就要调用linux的文件IO这些系统调用. 一.标准IO库函数的缓冲机制 由于IO设备的访问速度与CPU的速度相差好几个数量级,为了协调IO设备与CPU的速度的不匹配,对于块设备,内核使用了页高速缓存,即数据会先被拷贝到操作系统内核的页缓存区中,然后才会从操作系统内核的缓存区拷贝到应用程序的地址空间. 当应用程序尝

curses库--libncurses5-dev--游标移动及萤幕的显示

curses是一个在Linux/Unix下广泛应用的图形函数库.,作用是可以绘制在DOS下的用户界面和漂亮的图形. curses的名字起源于"cursor optimization",即光标优化.它最早由有美国伯克利大学的Bill Joy和Ken Arnold编写的,用来处理一个游戏rogue的屏幕显示.后来贝尔实验室的Mark Horton在System III Unix中重新编写了curses.现在几乎所有的Unix/Linux操作系统都带了curses函数库,curses也加入了

Linux Framebuffer编程简介

linux下,framebuffer设备文件名通常是/ dev/fb0,1,2等.控制framebuffer设备的一般步骤如下:1) 打开设备,映射framebuffer2)依照硬件要求,准备好数据3)把数据复制到framebuffer例子程序如下:1)打开设备,映射framebufferstatic void *fbbuf;int openfb(char *devname){    int fd;    fd = open(devname, O_RDWR);    if (ioctl(fd,

很全的linux网络编程技巧

注:作者王晓,本人认为总结得很好,故记之,绝无侵权之意. 1. LINUX网络编程基础知识 1 1.1. TCP/IP协议概述 1 1.2. OSI参考模型及TCP/IP参考模型 1 1.3. TCP协议 3 1.4. UDP协议 5 1.5. 协议的选择 6 2. 网络相关概念 6 2.1. socket概念 7 2.2. socket类型 8 2.3. socket信息数据结构 8 2.4. 数据存储优先顺序的转换 8 2.5. 地址格式转化 9 2.6. 名字地址转化 10 3. sock

Linux环境编程之共享内存区(一):共享内存区简介

Spark生态圈,也就是BDAS(伯克利数据分析栈),是伯克利APMLab实验室精心打造的,力图在算法(Algorithms).机器(Machines).人(People)之间通过大规模集成,来展现大数据应用的一个平台,其核心引擎就是Spark,其计算基础是弹性分布式数据集,也就是RDD.通过Spark生态圈,AMPLab运用大数据.云计算.通信等各种资源,以及各种灵活的技术方案,对海量不透明的数据进行甄别并转化为有用的信息,以供人们更好的理解世界.Spark生态圈已经涉及到机器学习.数据挖掘.

【转】分析Linux和windows动态库

原文地址:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html 摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系 统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理.但不同操作系统的动态库由 于格式不同,在需要不同操作系统调用时需要进行动态库程序移植.本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Lin

Linux网络编程10&mdash;&mdash;使用UDP实现五子棋对战

思路 1. 通信 为了同步双方的棋盘,每当一方在棋盘上落子之后,都需要发送给对方一个msg消息,让对方知道落子位置.msg结构体如下: /* 用于发给对方的信息 */ typedef struct tag_msg { int msg_type; /* 悔棋? */ int msg_color; int msg_row; int msg_col; }MSG, *pMSG; 2. 悔棋 用链表头插法来模拟栈,链表记录了双方下子的轨迹.结构如下: /* 记录每一步的轨迹 */ typedef stru

linux网络编程学习笔记之二 -----错误异常处理和各种碎碎(更新中)

errno 在unix系统中对大部分系统调用非正常返回时,通常返回值为-1,并设置全局变量errno(errno.h),如socket(), bind(), accept(), listen().erron存放一个正整数来保存上次出错的错误值. 对线程而言,每个线程都有专用的errno变量,不必考虑同步问题. strerror converts to English (Note: use strerror_r for thread safety) perror is simplified str