首先理清楚键盘是如何工作的。键盘作为一个智能设备,键盘内有一片Intel 8048(或8049)单片机(处理器)对整个键盘上的字符键、功能键、控制键和组合键进行管理,可将其看做是一个功能简单的但是独立的计算机。
我描述一下键盘的工作流程,单片机不断的扫描整个键盘,一旦有键被按下,单片机发送一个硬件中断请求给主机,并将扫描到的键的扫描码以串行方式发送给主机。主机响应键盘中断请求,调用INT 90H,将扫描码读入并转化为ascii码,存入缓冲区。
推测getch()的工作原理,到一个指定的系统缓冲区读入一个ascii码,若为空值,则等待,否则返回读取到的ascii码值。
由于不懂底层编程,我就写点伪码吧,表达一下思路。
int getch()
{
int result = 0;
while (true)//不断尝试获取一个非空标志
{
result = GetAsciiFromBuffer();//伪码
if (0!=result)//若取到一个非空ascii值,立即返回其值
{
return result;
}
}
}
关于探究getchar()和getch()的底层实现的东西就先告一段落吧。
PS:以上所有言论都是个人的想法,若要使用,不一定经得起推敲。