快速业务通道

使用 Ttyutils 截获 UNIX/Linux 终端

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-09
_stdout: 悬挂 / 恢复实终端标准输出;
insert/remove_event: 添加 / 删除事件表中的事件;
下面用一个例子描述如何编写一个 C 程序来使用上面提供的 feed 服务,包括从源代码编写到编译,连接完整的步骤.

#include <ttyutils.h>

int
main (int argc, char *argv[])
{
TRpcTarget target;

if (!t_init ())
return 1;

target.rt_timeout = 3;
target.rt_type = RPC_TARGET_PTS;
target.rt_pts = "/dev/pts/3";

if (!t_rpc_call_set_target (&target))
{
t_println ("set rpc target failed.");
return 1;
}

if (!t_rpc_call_feed ("hello", 5))
{
g_warning (_("rpc call failed."));
return 1;
}

t_uninit ();
return 0;
}

将上面的代码保存到文件 example.c,然后到用下面的命令编译它 :

$ cc -o example example.c `pkg-config --cflags --libs ttyutils-1`

第 1 行包含了头文件 <ttyutils.h>,这是每个外挂程序应该做的.

第 6 行声明了一个 TRpcTarget 结构的变量,这个结构描述如下 :

typedef enum
{
RPC_TARGET_TTY,
RPC_TARGET_PTS,
RPC_TARGET_PID,
RPC_TARGET_PATH
} TRpcTargetType;

typedef struct _TRpcTarget TRpcTarget;
struct _TRpcTarget
{
TRpcTargetType rt_type;
guint32 rt_timeout;
union
{
gchar *t_tty;
gchar *t_pts;
pid_t t_pid;
gchar *t_path;

注意 ttylook 不理睬在 socket 之间传送的数据内容,这些数据直接被写到用户终端屏幕,如果运行 ttyexec 和 ttylook 的终端类型不同,那么可能会出现屏幕的内容错乱.

发送数据给 ttyexec

ttylook 在启动时,会将用户终端的标准输入 ( 键盘 ) 至于关闭回显模式,这样,用户在终端上的输入在屏幕上是不可见的.

但是 ttylook 会得到这些输入数据,然后将这些数据传送给 ttyexec,ttyexec 会将这些数据作为用户的输入写到被监控的进程,这就好像运行 ttyexec 的用户输入了数据一样.

实现 ttyadmin

当 ttyexec 启动的时候,它会将它自身的信息注册到一个系统区域,称为黄页,这个黄页是用一片共享内存实现的,ttyexec 注册的信息包括它的进程 ID,终端和伪终端名称,lookd 服务和 rpcd 服务帮定的地址,等等,每个 ttyexec 在黄叶中占据一项.

当 ttyexec 退出的时候,它会将自身的注册信息从黄页中删除.

Ttyadmin 主要是管理这个黄页的程序.

查看 ttyexec 实例

在 ttyadmin 启动时,它建立一个全屏幕的窗口,然后查询黄页,得到当前系统中所有 ttyexec 实例的注册信息,并将这些数据缓存到自己的内部表中.

然后它格式化得到的信息,显示在主窗口中.

后续的所有操作 ( 例如排序 ) 都是基于这个内部表,但是允许用户去重读黄页 ( 当前的实现是按下空格键或者设定一个更新超时 ).

管理 ttyexec 实例

ttyadmin 提供了对 ttyexec 的管理能力,这些能力可以在运行 ttyadmin 时通过帮助获得,这里要说明的是,这些管理功能主要是基于黄页中的信息.

虽然 ttyadmin 可以查看和管理 ttyexec,但是它和 ttyexec 没有直接的关系.

ttyexec 也为 ttyadmin 提供了一些管理功能 ( 例如查询事件表的内容 ),这是通过 ttyexec 的 RPC 服务实现的,在这种情况下,ttyadmin 只能算是 ttyexec 的一个 RPC 客户端.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号