BBS水木清华站∶精华区

发信人: 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 kbentry 
的指针; 在 FreeBSD 下则是 PIO_KEYMAP, 参数为 keymap_t 结构的指针. 关于具体的 
内容, 请看相应的头文件. 
 
改变了 keymap 之后, 在检测到有输入时, 就可以读取输入的字符, 然后根据字符的 
情况相应地做各种处理...... 
 
 
第三部分将分析 vt 之间切换的处理....呵呵,  
 
-- 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.120.13.251] 

BBS水木清华站∶精华区