下面是测试代码:
//按键测试程序//
#include <stdio.h>//标准输入输出头文件//
#include <stdlib.h>//标准库//
#include <unistd.h>//一些宏的定义在这里//
#include<sys/ioctl.h>//设备的控制//
#include<sys/types.h>//定义了一些类型//
#include<sys/stat.h>//状态//
#include <fcntl.h>//文件控制//
#include<sys/select.h>//选择?//
#include<sys/time.h>//时间方面的函数//
#include <errno.h>//有关错误方面的宏//
//主函数入口//
int main(void)
{
int i; //键盘输出时用到的循环变量//
int buttons_fd;//buttons设备号//
int key_value[4]; //四个按键的取值//
//打开键盘设备文件//
buttons_fd = open("/dev/buttons",0);//以0方式打开//
//打开出错处理//
if(buttons_fd < 0)//打开出错就会返回一个负值//
{
perror("open device buttons");//perror函数?//
}
//for无限循环,等待用户输入//
//这是很典型的程序执行方式//
for(;;)
{
fd_set rds; //fd_set是types.h中定义的类型,实质上是int型//
//rds用来存储设备号//
//FD_ZERO是哪里定义的呢?//
//FD_SET是哪里定义的呢?//
//select函数是干什么的呢?//
//返回值ret//
//返回值的具体意义是什么呢?//
{
perror("select");
exit(1);
}
{
printf("Timeout.\n");
}
else //能够读到数据//
if(FD_ISSET(buttons_fd,&rds))//??//
{
//读取键盘驱动发出的数据//
//key_value和键盘驱动中定义一致//
//注意键盘设备读取的特点//
if(ret != sizeof(key_value))//没有接收够//
{
if(errno !=EAGAIN)
perror("read buttons\n");
continue;
}
else //正确接收,则打印到标准终端//
{
for(i = 0;i < 4;i++)//最开始定义的循环变量i//
printf("K%d %s, key value = 0xx\n",i,(key_value[i]& 0x80) ? "released" : key_value[i] ? "presseddown" : "",key_value[i]);
//这一连串的输出,要注意格式//
}
}
}
//关闭设备//
close(buttons_fd);
return 0; //主函数返回//
}
END!!
联系客服