我正在浏览scanf here的实现,但我无法找到程序从键盘获取输入的确切方法。我知道总有另一层要深入,但有人可能会解释一下C代码下面的一步,即scanf,键盘输入如何可用于我的程序?
答案 0 :(得分:0)
尽管该文件名为scanf.c
,但它只包含sscanf
和vsscanf
函数(以及另一个对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