QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 860|回复: 6

在linux 下接收键盘等外部设备的方法

[复制链接]
发表于 2004-9-13 11:53:19 | 显示全部楼层 |阅读模式
我是用gcc 开发一个应用程序, 其中需要等待接收外部设备的消息动作,如键盘,鼠标等设备,然后程序开始下一步的操作.
我刚开始在linux 下写程序,不知其中用什么函数,用什么方法进行编写,我只需要一两个例程就可了,谢谢指点!
发表于 2004-9-13 13:52:27 | 显示全部楼层
那要看你开发用的什么库,这会关系到用什么方法来处理键盘等消息。
回复

使用道具 举报

 楼主| 发表于 2004-9-13 14:48:14 | 显示全部楼层
我是在命令行下写程序,没有x-windows
我程序运行后, 只要有键盘和鼠标等外设有信息输入就接收并处理, 并且是循环响应的,在linux 下没写过,也不知用什么库好
回复

使用道具 举报

发表于 2004-9-14 10:19:02 | 显示全部楼层
[code:1]
#include <stdio.h>
#include <termios.h>
#include <sys/ioctl.h>

int Get_KeyValue()
{
        struct termios stored_settings;
        struct termios new_settings;
        int key_value;
        int key_press=0;
       
        tcgetattr(0,&stored_settings);
        new_settings = stored_settings;
       
        new_settings.c_lflag &= (~ICANON);
        new_settings.c_cc[VTIME] = 0;
        new_settings.c_cc[VMIN] = 1;
        tcsetattr(0,TCSANOW,&new_settings);

        ioctl(0,FIONREAD,&key_press);
        if(key_press)
        {
                key_value=getc(_IO_stdin);
        }
        else
        {
                key_value=0;
        }
        return key_value;
       
        tcsetattr(0,TCSANOW,&stored_settings);

}
main()
{
        int new_char=0;
        while(1)
        {
                new_char=Get_KeyValue();
                if(new_char)
                {
                        if(new_char=='q')
                                break;
                        printf("you press key:'%c'\n",new_char);
                }
                usleep(10000);
        }
}
[/code:1]

用ncurses库
[code:1]
#include <curses.h>
#include <stdio.h>
#include <stdlib.h>
main()
{
        int c=0;
        initscr();
        cbreak();
        noecho();

        while(1)
        {
                c=getch();
                if(c>='a'&&c<='z')
                {
                        if(c=='q')
                                break;
                        printf("your input is:%c\n",c);
                        move(0,0);
                        refresh();
                }
                printf("asdfsdf\n");
                        refresh();
        }
        endwin();

}
[/code:1]
回复

使用道具 举报

 楼主| 发表于 2004-9-14 11:08:06 | 显示全部楼层
太感谢了,但是如果有鼠标点击也能动作吗? 我还有看看调试一下
回复

使用道具 举报

发表于 2004-9-14 14:24:27 | 显示全部楼层
那我想接收串口收到数据的事件,要用哪个库呢?
回复

使用道具 举报

发表于 2004-9-15 12:33:20 | 显示全部楼层
[quote:df01f685f5="pallas"]那我想接收串口收到数据的事件,要用哪个库呢?[/quote]
不用什么库!
找“linux串口编程”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 13:47 , Processed in 0.044030 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表