月度归档:2015年03月

linux c curses.h 用法

系统环境:阿里云 Cent os

默认情况下linux系统都会自带运行库 curses.h,
我们可以通过 [root@localhost ~]#find / -name “curses.h” 查找系统是否已经拥有curses.h 运行库,如果未查找到运行可以上网安装

curses简介:
curses是在linux下应用广泛的图形库,curses工作在屏幕、窗口、子窗口之上,
stdscr 指标准屏幕,curscr 指当前屏幕
使用curses图形库时, 在绘制图形之前 需要 initscr() 初始化; 使用完毕后 需关闭屏幕 endwin();

initscr(); 初始化Curses 屏幕寻址系统
int addch(const chtype char_to_add); 在屏幕上的当前位置打印字符。需要单个字符参数。
int addchstr(chtype *const string_to_add); //当前位置添加字符(串)
int printw(char *format, …); //输出字符类似与printf
int refresh(void); //刷新物理屏幕
int box(stdscr,ACS_VLINE, ACS_HLINE); //围绕窗口绘制方框
int insch(chtype char_to_insert); //插入一个字符(已有字符后移)
int insertln(void); //插入空白行
int deleteln(void); //删除字符和空白行
int beep(void); //终端响铃
int flash(void); //闪烁

move(Row,Col) 将光标移动到指定的行和列。需要行和列编号参数。
mvcur(Row,Col) 将物理光标移动到指定的行和列。需要行和列编号参数。

addstr string 在屏幕上的当前位置打印 String 的值。
mvaddch (Row,Col) 将逻辑光标移动到指定的行和列。在屏幕上指定的行和列打印指定的字符。需要行和列编号参数。
mvaddstr(Row,Col) string 将逻辑光标移动到指定的行和列。在屏幕上指定的行和列打印 String 的值。需要行和列编号参数,还需要一个 String 参数。
clrtoeol 清除当前行从当前列到行尾的内容。
clrtobot 清除从当前列到屏幕结尾的屏幕内容。
getch 从标准输入检索一个字符。
getstr 从标准输入检索一个字符串。
insch 在当前屏幕位置插入一个字符。

start_color(); //开启彩色模式
init_pair(colorNumber,short 前景色,short 背景色); //初始化colorNumber号颜色组合
COLOR_PAIR(int colorNumber); //对colorNumber号颜色组合作为属性来访问(用于前面的attr函数)
pair_content(short colorNumber, short *foreground, short *background); //获取已定义的颜色组合信息
endwin(); 取消初始化Curses屏幕寻址系统 重置状态

linux curses

测量程序执行时间-周期计数器如何测量执行时间

摘自“深入理解计算机系统”
周期计数器如何测量程序的执行时间
周期计数器提供了一个非常精确的工具,可以测量一个程序执行中两个不同点之间经过的时间。我们的周期计数器通过在程序中调用start_counter 和调用get_counter之间总的周期数。这些程序不记录那些进程使用了这个周期,只记载了这个计数器开始和结束的位置,并取两个之差作为周期计数器测量程序执行时间。
例:测量某个程序P的运行时间的一种简单方法就是用周期计数器对P的一次执行进行记时,如下代码所示:
double time_P(){
start_counter(); // 开始计数器
P(); //开始运行程序P
return get_counter(); //返回计数器时间
}
如果在这两次调用计数器里面,有其它的另外进程执行,那么这段代码就很容易产生令人误解的结果。如果机器负载很重,或者如果P的运行时间特别长,那么这个get_counter检测出的程序运行时间都是同实际正常值存在较大差异。
如何将高速缓存对测量程序的执行时间的影响?我们需要在程序开始时,加上P(),把程序加载到高速缓存中
double time_p(){
P();
start_counter(); // 开始计数器
P(); //开始运行程序P
return get_counter(); //返回计数器时间
}

我们可以看出,周期计数器需要进行N次测量,然后通过取n次近似值,来预估程序的执行时间。