Linux 版 (精华区)
发信人: tcpip (俺的昵称改了), 信区: Linux
标 题: CCE 实现分析 (2)(转寄)
发信站: 哈工大紫丁香 (Sat Sep 18 17:11:29 1999), 转信
发信人: holly (holly), 信区: Linux
标 题: CCE 实现分析 (2)
发信站: BBS 水木清华站 (Sat Sep 18 14:27:01 1999)
CCE 实现分析 (2) - CCE 如何处理输入
by Holly Lee 1999 holly_lee@soim.net
-------------------------------------------------------------------------
在第一部分中已经讲到过, CCE 利用将其子 shell 进程的 1, 2 fd 重定向到
pty 来过滤其后代进程向 console 的 I/O, 通过定时的 select 调用来得知是否
后代的进程已经有向 console 的输出.
对于输入, 在初始化时 CCE 已经将 console 这个 terminal 设置成 raw 方式了.
在整个检查是否有输入输出的循环中, 如果在 stdin ( fd 为 0 ) 中有内容,
则说明已有东西输入. ( 用 FD_ISSET 作检测 )
那么, 怎样检测到底是输入了通常的键盘字符还是作中西文切换, 或者是输入各种
输入法的字符呢? 在 console 本身的键盘 driver 中, 类似于 Ctrl+Space,
Ctrl+Alt 等等的按键序列是被 discard 的. 也就是说如果在这种情况下, 按这些
键时将不会产生特殊的输入字符码, 这时, 就需要通过改变或建立按键序列到特殊
的字符之间映射. 也就是通过改变 keymap 来实现.
在 linux 下, 修改 keymap 的 ioctl 码为 KBSKBENT, 其参数为指向 struct kbentr
y的指针; 在 FreeBSD 下则是 PIO_KEYMAP, 参数为 keymap_t 结构的指针. 关于具体
的内容, 请看相应的头文件.
改变了 keymap 之后, 在检测到有输入时, 就可以读取输入的字符, 然后根据字符的
情况相应地做各种处理......
第三部分将分析 vt 之间切换的处理....呵呵,
--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.120.13
.251]
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.071毫秒