• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 關 閉

    新聞中心

    EEPW首頁 > 工控自動化 > 設計應用 > 基于Linux內核的鍵盤模擬實現

    基于Linux內核的鍵盤模擬實現

    作者: 時間:2012-08-17 來源:網絡 收藏

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

    本文引用地址:http://www.czjhyjcfj.com/article/202221.htm

    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)

    5 結束語

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

    更多計算機與外設信息請關注21ic計算機與外設頻道

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

    DIY機械鍵盤相關社區:機械鍵盤DIY


    linux相關文章:linux教程



    上一頁 1 2 下一頁

    關鍵詞: Linux 內核 鍵盤 模擬

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 敖汉旗| 富顺县| 京山县| 临城县| 灵武市| 疏附县| 米易县| 原平市| 合阳县| 长丰县| 上思县| 洞口县| 松滋市| 天全县| 富民县| 刚察县| 若尔盖县| 库伦旗| 繁峙县| 新丰县| 龙井市| 玉林市| 临沧市| 汾阳市| 图木舒克市| 黄梅县| 鄂伦春自治旗| 昌吉市| 顺义区| 玉溪市| 安龙县| 华安县| 保康县| 灵石县| 云浮市| 彰武县| 屏南县| 泰州市| 吉林省| 蛟河市| 离岛区|