⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000003.htm

📁 一份很好的linux入门资料
💻 HTM
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;holly&nbsp;(holly),&nbsp;信区:&nbsp;Linux&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;CCE&nbsp;实现分析&nbsp;(2)&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Sat&nbsp;Sep&nbsp;18&nbsp;14:27:01&nbsp;1999)&nbsp;<BR>&nbsp;<BR>CCE&nbsp;实现分析&nbsp;(2)&nbsp;-&nbsp;CCE&nbsp;如何处理输入&nbsp;<BR>&nbsp;<BR>by&nbsp;Holly&nbsp;Lee&nbsp;1999&nbsp;&nbsp;holly_<A HREF="mailto:lee@soim.net">lee@soim.net</A>&nbsp;<BR>&nbsp;<BR>-------------------------------------------------------------------------&nbsp;<BR>&nbsp;<BR>在第一部分中已经讲到过,&nbsp;CCE&nbsp;利用将其子&nbsp;shell&nbsp;进程的&nbsp;1,&nbsp;2&nbsp;fd&nbsp;重定向到&nbsp;<BR>pty&nbsp;来过滤其后代进程向&nbsp;console&nbsp;的&nbsp;I/O,&nbsp;通过定时的&nbsp;select&nbsp;调用来得知是否&nbsp;<BR>后代的进程已经有向&nbsp;console&nbsp;的输出.&nbsp;<BR>&nbsp;<BR>对于输入,&nbsp;在初始化时&nbsp;CCE&nbsp;已经将&nbsp;console&nbsp;这个&nbsp;terminal&nbsp;设置成&nbsp;raw&nbsp;方式了.&nbsp;<BR>在整个检查是否有输入输出的循环中,&nbsp;如果在&nbsp;stdin&nbsp;(&nbsp;fd&nbsp;为&nbsp;0&nbsp;)&nbsp;中有内容,&nbsp;<BR>则说明已有东西输入.&nbsp;(&nbsp;用&nbsp;FD_ISSET&nbsp;作检测&nbsp;)&nbsp;<BR>&nbsp;<BR>那么,&nbsp;怎样检测到底是输入了通常的键盘字符还是作中西文切换,&nbsp;或者是输入各种&nbsp;<BR>输入法的字符呢?&nbsp;在&nbsp;console&nbsp;本身的键盘&nbsp;driver&nbsp;中,&nbsp;类似于&nbsp;Ctrl+Space,&nbsp;<BR>Ctrl+Alt&nbsp;等等的按键序列是被&nbsp;discard&nbsp;的.&nbsp;也就是说如果在这种情况下,&nbsp;按这些&nbsp;<BR>键时将不会产生特殊的输入字符码,&nbsp;这时,&nbsp;就需要通过改变或建立按键序列到特殊&nbsp;<BR>的字符之间映射.&nbsp;也就是通过改变&nbsp;keymap&nbsp;来实现.&nbsp;<BR>对于输入,&nbsp;在初始化时&nbsp;CCE&nbsp;已经将&nbsp;console&nbsp;这个&nbsp;terminal&nbsp;设置成&nbsp;raw&nbsp;方式了.&nbsp;<BR>在整个检查是否有输入输出的循环中,&nbsp;如果在&nbsp;stdin&nbsp;(&nbsp;fd&nbsp;为&nbsp;0&nbsp;)&nbsp;中有内容,&nbsp;<BR>则说明已有东西输入.&nbsp;(&nbsp;用&nbsp;FD_ISSET&nbsp;作检测&nbsp;)&nbsp;<BR>&nbsp;<BR>那么,&nbsp;怎样检测到底是输入了通常的键盘字符还是作中西文切换,&nbsp;或者是输入各种&nbsp;<BR>输入法的字符呢?&nbsp;在&nbsp;console&nbsp;本身的键盘&nbsp;driver&nbsp;中,&nbsp;类似于&nbsp;Ctrl+Space,&nbsp;<BR>Ctrl+Alt&nbsp;等等的按键序列是被&nbsp;discard&nbsp;的.&nbsp;也就是说如果在这种情况下,&nbsp;按这些&nbsp;<BR>键时将不会产生特殊的输入字符码,&nbsp;这时,&nbsp;就需要通过改变或建立按键序列到特殊&nbsp;<BR>的字符之间映射.&nbsp;也就是通过改变&nbsp;keymap&nbsp;来实现.&nbsp;<BR>&nbsp;<BR>在&nbsp;linux&nbsp;下,&nbsp;修改&nbsp;keymap&nbsp;的&nbsp;ioctl&nbsp;码为&nbsp;KBSKBENT,&nbsp;其参数为指向&nbsp;struct&nbsp;kbentry&nbsp;<BR>的指针;&nbsp;在&nbsp;FreeBSD&nbsp;下则是&nbsp;PIO_KEYMAP,&nbsp;参数为&nbsp;keymap_t&nbsp;结构的指针.&nbsp;关于具体的&nbsp;<BR>内容,&nbsp;请看相应的头文件.&nbsp;<BR>&nbsp;<BR>改变了&nbsp;keymap&nbsp;之后,&nbsp;在检测到有输入时,&nbsp;就可以读取输入的字符,&nbsp;然后根据字符的&nbsp;<BR>情况相应地做各种处理......&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>第三部分将分析&nbsp;vt&nbsp;之间切换的处理....呵呵,&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;bbs.net.tsinghua.edu.cn·[FROM:&nbsp;202.120.13.251]&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -