關 閉

        新聞中心

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

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

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

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

        本文引用地址:http://www.104case.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 內核 鍵盤 模擬

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 湾仔区| 铅山县| 泉州市| 交口县| 全南县| 巴彦淖尔市| 九龙坡区| 龙井市| 屯留县| 会昌县| 格尔木市| 许昌县| 德庆县| 富民县| 延川县| 金塔县| 天长市| 天全县| 富宁县| 平罗县| 治多县| 梓潼县| 项城市| 阜南县| 霍山县| 如皋市| 甘南县| 河北区| 青海省| 思茅市| 溧水县| 新野县| 呼图壁县| 浪卡子县| 襄樊市| 渭源县| 长乐市| 雅安市| 怀来县| 原阳县| 五指山市|