<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 基于Linux內(nèi)核的鍵盤模擬實現(xiàn)

          基于Linux內(nèi)核的鍵盤模擬實現(xiàn)

          作者: 時間:2012-08-17 來源:網(wǎng)絡(luò) 收藏

          底層tty驅(qū)動調(diào)用receive_buf()這個函數(shù)用來發(fā)送硬件設(shè)備接收處理的字符。參見/usr/src/linux/drivers/char/n_tty.c:

          本文引用地址:http://www.ex-cimer.com/article/202221.htm

          static void n_tty_receive_buf(struct tty_struct *tty, const

          unsigned char *cp, char *fp, int count)

          參數(shù)cp是一個指向設(shè)備接收的輸入字符的buffer的指針。參數(shù)fp是一個指向一個標(biāo)記字節(jié)指針的指針。在具體的實現(xiàn)中,先保存原始的tty receive_buf()函數(shù),然后重置ldisc.receive_buf到自定義的new_receive_buf()函數(shù)來記錄用戶的輸入。

          例如:要記錄在終端tty1設(shè)備上的輸入。

          int fd = open(/dev/tty1, O_RDONLY, 0);

          struct file *file = fget(fd);

          struct tty_struct *tty = file->private_data;

          //保存原始的receive_buf()函數(shù)

          old_receive_buf = tty->ldisc.receive_buf;

          //替換成新的new_receive_buf函數(shù)

          tty->ldisc.receive_buf = new_receive_buf;

          //新的new_receive_buf函數(shù)

          void new_receive_buf(struct tty_struct *tty, const unsigned char *cp, char *fp, int count)

          {

          logging(tty, cp, count);

          //紀(jì)錄用戶擊鍵

          /* 調(diào)用回原來的receive_buf */

          (*old_receive_buf)(tty, cp, fp, count);

          }

          4.4 tty_read函數(shù)

          當(dāng)一個進(jìn)程需要通過sys_read()函數(shù)來讀取一個tty終端的輸入字符時,tty_read函數(shù)就會被調(diào)用。參見文件/usr/src/linux/drives/char/tty_io.c:

          static ssize_t tty_read(struct file * file, char * buf, size_t count,

          loff_t *ppos)

          5 結(jié)束語

          目前,利用勾子函數(shù)實現(xiàn)基于的這種方法使用非常靈活,同時也可以跨平臺進(jìn)行移植,可通過tty和pts來記錄下本地和遠(yuǎn)程會話的所有擊鍵動作,并且也支持一些特殊的按鍵。當(dāng)然,要使更靈活,下一步還需要更多的改進(jìn),例如增加多種不同日志記錄模式的支持等。

          更多計算機(jī)與外設(shè)信息請關(guān)注21ic計算機(jī)與外設(shè)頻道

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          DIY機(jī)械鍵盤相關(guān)社區(qū):機(jī)械鍵盤DIY


          linux相關(guān)文章:linux教程



          上一頁 1 2 下一頁

          關(guān)鍵詞: Linux 內(nèi)核 鍵盤 模擬

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();