酷文首页  
站内搜索:
网站地图 | RSS订阅 | 收藏本站
经济论文
证券金融
工商管理
会计审计
法学论文
医药论文
社会论文
教育论文
计算机论文
艺术论文
哲学论文
财政税收
财务管理
公共管理
理学论文
政治论文
文学论文
工学论文
文化论文
实用文档
应用文
自考成考
演讲稿
法律文书
子栏目导行↓
网站赞助商↓
本类热点↓
本类更新↓
热门标签↓
网摘收藏↓

基于Linux内核的键盘模拟实现

作者:未知
来源:论文网
点击:
载入中...
加入时间:2007-05-17
字体大小:[  ]

put_queue函数在内核中定义如下:
void put_queue(int ch)
{
wake_up(&keypress_wait);
if (tty) {
tty_insert_flip_char(tty, ch, 0);
con_schedule_flip(tty);    }}
4.3  receive_buf函数
底层tty驱动调用receive_buf()这个函数用来发送硬件设备接收处理的字符。参见/usr/src/linux/drivers/char/n_tty.c:
static void n_tty_receive_buf(struct tty_struct *tty, const
unsigned char *cp, char *fp, int count)
参数cp是一个指向设备接收的输入字符的buffer的指针。参数fp是一个指向一个标记字节指针的指针。在具体的实现中,先保存原始的tty receive_buf()函数,然后重置ldisc.receive_buf到自定义的new_receive_buf()函数来记录用户的输入。
例如:要记录在终端tty1设备上的输入。
int fd = open("/dev/tty1", O_RDONLY, 0);
struct file *file = fget(fd);
struct tty_struct *tty = file->private_data;
//保存原始的receive_buf()函数
old_receive_buf = tty->ldisc.receive_buf;
//替换成新的new_receive_buf函数
tty->ldisc.receive_buf = new_receive_buf;   


//新的new_receive_buf函数
void new_receive_buf(struct tty_struct *tty, const unsigned char *cp, char *fp, int count)
{   
logging(tty, cp, count);    
//纪录用户击键
/* 调用回原来的receive_buf */
(*old_receive_buf)(tty, cp, fp, count);
}
4.4  tty_read函数
当一个进程需要通过sys_read()函数来读取一个tty终端的输入字符时,tty_read函数就会被调用。参见文件/usr/src/linux/drives/char/tty_io.c:
static ssize_t tty_read(struct file * file, char * buf, size_t count,
loff_t *ppos)

结束语
目前,利用勾子函数实现基于Linux内核的键盘模拟的这种方法使用非常灵活,同时也可以跨平台进行移植,可通过tty和pts来记录下本地和远程会话的所有击键动作,并且也支持一些特殊的按键。当然,要使键盘模拟更灵活,下一步还需要更多的改进,例如增加多种不同日志记录模式的支持等。

转贴于 酷文网-论文下载中心 http://www.coolwen.net


共2页: 上一页 [1] 2 下一页

网摘收藏:
 -> 在百度中搜索:基于Linux内核的键盘模拟实现
 -> 在Google中搜索:基于Linux内核的键盘模拟实现
免责声明 | 关于我们 | 广告联系 | 友情链接 | 网站地图 | 共同合作
免费论文 毕业论文 毕业论文范文 酷文网(www.coolwen.net) 版权所有 coolwen.net 2007,All Rights Reserved
E-mail:hui_love#tom.com(为防止垃圾邮件请把#换成@) 点击这里给我发消息 点击这里给我发消息
湘ICP备07003917号