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毫秒