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