HACK#73 使用SystemTap编写对话型程序
本节使用SystemTap在内核中执行交互式(interactive)程序。
虽然在执行时有一些制约,但SystemTap还是可以作为一种脚本语言来处理。既可以向控制台输出,也可以调用外部程序。另外,还可以追踪Linux内核上获取的信息,因此也可以得到键盘输入或鼠标输入的情况。也可以编写内核计时器的处理程序,因此可以每隔一定时间更新状态。但是反过来说,复杂且花费时间的处理就会长时间停止内核自身的处理,因此不适合使用SystemTap。
也就是说,SystemTap是适用于编写游戏等对话型程序的语言。特别是,计时器周边的处理不会发生延迟,因此如果无视禁止硬件中断的影响,就可以进行最快的周期处理。本节将介绍怎样使用SystemTap接受用户的输入,怎样进行简单的界面控制。
使用SystemTap进行输出界面控制
SystemTap的输出为控制台。要对控制台进行控制,使用ANSI转义序列(escape sequence)是最简单的。SystemTap为此准备了库函数(见表8-14)。
熟练使用ansi_clear_screen和ansi_cursor_move,就可以每隔一定时间更改控制台界面,或者在任意位置写入任意文字。例如,执行下列脚本,就可以在看到“@”在界面上斜着运动。
global x=40,y=1;
probe timer.ms(100){
ansi_clear_screen()
ansi_cursor_move(x—,y++/2)
print("@")
if(x==0)
exit()
}
像这样重复地使计时器失效,每隔一定时间刷新界面,并绘制新状态,就可以在界面上自由显示文字。