Linux 版 (精华区)
发信人: tcpip (俺的昵称改了), 信区: Linux
标 题: CCE 实现分析 (1)(转寄)
发信站: 哈工大紫丁香 (Sat Sep 18 17:17:58 1999), 转信
发信人: holly (holly), 信区: Linux
标 题: CCE 实现分析 (1)
发信站: BBS 水木清华站 (Fri Sep 17 20:58:26 1999) WWW-POST
首先声明: 本人不习惯写长文章...呵呵...懒. BTW,
今天用 WWW 发文才发现进版画面怎么是 FreeBSD 的 logo ????
------------------------------------------------------------------
CCE 实现分析 (1) - 如何处理 console 的输出
by Holly Lee 1999
本文可以以任何形式传播, 但不得用于任何商业目的.
------------------------------------------------------------------
本文是针对懂得 Linux 操作和编程的 programmer 写的, 不解释系统调用
和库函数的内容.
CCE 采用的方法是来自于 KON, 也就是, 它们采用的是同一个方式来处理
在 console 上的 I/O.
在启动 CCE 时, 大家可以看到, CCE 重新启动了一个新的 shell, 这一点从
ps 的输出也可以看到, 因此, 这个新的 shell 是作为 CCE 的子进程来运行
的.
通常, shell 以 terminal (其实这里也就是 console ) 的标准输入/输出/
错误输出作为与用户交互的方式. 我们所在 console 上看到的字符 (以及
输入的字符) 从系统的角度来说, 是向 console 的 device driver 进行读
写操作的结果. - 其他程序也一样, 除非你特地写一个直接写 Video RAM
的程序 :-)
但是, 一旦我们启动了 CCE, CCE 会将显示卡设置到图形方式, 显然, console
的 driver 是无法处理的. 如果还要做到同样地输入/输出, 有几个办法可以
达到: 1) 改写 console 的驱动程序, 使得它能够处理图形方式, 这要改动
核心了 - Linux 不支持 STREAM - 在支持 STREAM 的系统中倒是可以考虑
这种办法(SCO, Solaris, etc) (也许我会试试 :-) ). 2) 同 DOS 下一样,
利用时钟监视 B800 段的内容, 然后相应地显示汉字. 这两种方式都需要
root 权限并且可能需要明白或操纵核心的结构. 3) 象 CCE 采用的方式一样,
重定向子 shell 进程的 File Descriptor 0, 1, 2 到一个 pty! 这利用了
Unix 中所有子进程将继承父进程的 fd 的特性.
OK, 到这里就基本上可以明白了, dup2 调用可以将子 shell 进程的 fd 0/1/2
重定向到打开的 pty 的相应的 fd, 这样, 通过定时检查 pty 的 fd, 就可以
知道是否有东西要输出了.
那么怎么知道有没有东西呢? 答案是: select() ! 呵呵...我认为 select 是
Unix 中第二有用的系统调用 (第一是 ioctl)
CCE 就是这样定时做检查, 然后自己在屏幕上画字符.......反正要作闪烁的
光标也要定时器.
--
※ 来源:·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)
页面执行时间:2.242毫秒