麻烦各位大侠帮帮忙,我写了个按键的驱动,然后编了个测试程序,但,测试程序有问题,代码如下:
int main( void )
{
while( 1 )
{
int fp = open( "/dev/button_m", O_RDWR );
char number;
fd_set rds;
int ret;
FD_ZERO(&rds);
FD_SET(fp, &rds);
/*使用系统调用select检查是否能够从/dev/buttons设备读取数据*/
ret = select(fp + 1, &rds, NULL, NULL, NULL);
/*读取出错则退出程序*/
if (ret < 0) {
perror("select");
exit(1);
}
if (ret == 0) {
printf("Timeout.\n");
}
/*能够读取到数据*/
else if (FD_ISSET(fp, &rds))
read( fp, &number, 1 );
printf( "button 0x%c is pressed~~\n", number );
close( fp );
}
return 0;
}
我一定要每一次按键之前都要open文件,然后又要close,如果不这样做的话,按了一次键之后,以后的按键就没有反应了。
打开文件不是只要进行一次就行了吗?我本来一位这样写的:
int main( void )
{
int fp = open( "/dev/button_m", O_RDWR );
char number;
while( 1 )
{
fd_set rds;
int ret;
FD_ZERO(&rds);
FD_SET(fp, &rds);
/*使用系统调用select检查是否能够从/dev/buttons设备读取数据*/
ret = select(fp + 1, &rds, NULL, NULL, NULL);
/*读取出错则退出程序*/
if (ret < 0) {
perror("select");
exit(1);
}
if (ret == 0) {
printf("Timeout.\n");
}
/*能够读取到数据*/
else if (FD_ISSET(fp, &rds))
read( fp, &number, 1 );
printf( "button 0x%c is pressed~~\n", number );
}
close( fp );
return 0;
}
但是这样写就不行了,为什么呢?