Next Previous Contents

13. 第五个例子:XmDipmon

Bullwinkle: 嗨!Rocky ,注意啦,我要从我的帽子里拉出一直兔子。
Rocky:      但这个是骗局从没操作过。
Bullwinkle: 这个时间绝对有把握。
            快节奏音乐!
            很好,我获得结束了.
Rocky:      并且现在它的时间给其他指定的特写。
            --- "Rocky 和它的朋友"

XmDipmon 是以个漂亮小巧的应用程序,它为一个按钮的样子来显示 Internet 连接。当连接中断它会闪光和发出声音。经常是这些所有的案例在乡下的电话系统。不幸的是, XmDipmon 操作仅有 dip ,使用它的那些人多数是用来使用 chat (译注:聊天程序)连接。.

构建 XmDipmon 是没问题的。 XmDipmon 链接到 Motif 库,但是它要有 Lesstif 来构建和运转才能良好。这个挑战是修改包的工作,当使用 chat ,这个实际上是要修改源代码 ,并必要地需要一些程序开发知识。

        "当 xmdipmon 启动,它检查一个文件是 /etc/dip.pid
         (你能让它看其他文件使用 -pidfile 命令行选项
          )。  这个文件包含 dip 后台进程的 PID (dip 转换它自己到后台模式一次,它有个确定的连接)。"
                       --- 来自 XmDipmon 的 README 文件

使用 -pidfile 选项,这个程序启动后能定向到不同的文件检查,只有这个文件存在的时候能成功 chat 登陆。 很明显这个是 modem 开关锁文件。我们应该因此尝试调用 xmdipmon -pidfile /var/lock/LCK..ttyS3 (这里假设 modem 在 com 端口#4, ttyS3)。尽管这个只解决部分问题。这个程序不断监控 dip 后台进程,并且我们需要修改它用 chat 或 ppp 代替处理。

在那里只有以个源码文件,但幸运的是它有很好的注释。阅读 xmdipmon.c 文件,我们找到 getProcFile 函数,标题描述如下:

/*****
* Name:                 getProcFile
* Return Type:  Boolean
* Description:  tries to open the /proc entry as read from the dip pid file.
<snip>
*****/

我们追踪到这里很激动。继续追踪到函数部分...

                        /* we watch the status of the real dip deamon */
                        sprintf(buf, "/proc/%i/status", pid);
                        procfile = (String)XtMalloc(strlen(buf)*sizeof(char)+1);
                        strcpy(procfile, buf);
                        procfile[strlen(buf)] = '\0';

找到所需的在 2383 行:

                        sprintf(buf, "/proc/%i/status", pid);
                                      ^^^^^^^^^^^^^^^^^^^^^

这个检查看是否 dip 后台程序运行。那么,我们要怎么改变它代替监控 pppd

查看 pppd manpage

FILES
       /var/run/pppn.pid (BSD or Linux), /etc/ppp/pppn.pid (others)
                     Process-ID for pppd process on ppp interface unit n.

修改 xmdipmon.c 第 2383 行为:

                        sprintf(buf, "/var/run/ppp0.pid" );

重新构建这个包,没任何问题。现在用新的命令行参数测试它。它工作看起来好极了。这个小的蓝色按钮显示当一个 ppp 连接到 ISP 并确定,当连接中断会闪光和发出声音。现在我们有以个完全功能的 chat 监控。

XmDipmon 能在 Ripley Linux Tools 下载。


Next Previous Contents