Scanf如何查找键盘输入?

时间:2014-09-03 06:34:03

标签: io keyboard scanf

我正在浏览scanf here的实现,但我无法找到程序从键盘获取输入的确切方法。我知道总有另一层要深入,但有人可能会解释一下C代码下面的一步,即scanf,键盘输入如何可用于我的程序?

1 个答案:

答案 0 :(得分:0)

尽管该文件名为scanf.c,但它只包含sscanfvsscanf函数(以及另一个对C库API不重要的内部函数)。

因此,它仅用于扫描字符串而不是从文件中读取。

实际 scanf的工作方式而言,它通常只使用C库中的低级函数,例如getchar()和{{1} }。

这些功能的工作方式而言,这取决于实施。它可能再次调用较低级别的函数,它可能有一个内存映射键盘,因此它只能读取内存以获得击键,它可能会在ISR中接收中断并存储密钥以供以后提取。

可能性非常广泛。


对于一些具体的示例,我已经为教育市场开发了一个微处理器仿真器,它使用I / O端口作为键盘(和其他设备)。所以最低级别的代码有以下几行:

ungetc()

相比之下,(更成功的)Linux可以使用其中一个系统调用从输入文件描述符中读取字符:

:keyin  equ  07d2         ; memory mapped keyboard port
        push rf           ; preserve register
        setw rf :keyin    ; use register f for input
:loop   inb  r0 rf        ; get keyboard value to register 0
        jz   :loop        ; 0 means none available, so try again
        pop  rf           ; restore register f, register 0 now holds key