红联Linux门户
Linux帮助

用两个测试程序打开同一个驱动,一个能正常打开,一个却提示设备繁忙?

发布时间:2010-10-08 16:54:34来源:红联作者:308534826
[i=s] 本帖最后由 308534826 于 2010-10-8 20:01 编辑 [/i]

以下这个程序能正常打开。
#include
#include
#include
#include

int main(int argc, char **argv)
{
int i;
int ret;
int fd;
int press_cnt[4];

fd = open("/dev/button", 0); // 打开设备
if (fd < 0) {
printf("Can't open /dev/button\n");
return -1;
}

// 这是个无限循环,进程有可能在read函数中休眠,当有按键被按下时,它才返回
while (1) {
// 读出按键被按下的次数
ret = read(fd, press_cnt, sizeof(press_cnt));
if (ret < 0) {
printf("read err!\n");
continue;
}

for (i = 0; i < sizeof(press_cnt)/sizeof(press_cnt[0]); i++) {
// 如果被按下的次数不为0,打印出来
if (press_cnt[i])
printf("K%d has been pressed %d times!\n", i+1, press_cnt[i]);
}
}
close(fd);

下面这个程序一打开就提示:Device or resource busy
其代码如下:
#include
#include
#include
#include
#include

int main(void)
{
int fd;
int key_value;

fd = open("/dev/button",0);
if(fd < 0)
{
perror("Open device key");
exit(1);
}
for(;;)
{
fd_set rds;
int ret;

FD_ZERO(&rds);
FD_SET(fd,&rds);

ret = select(fd + 1,&rds,NULL,NULL,NULL);
if(ret < 0)
{
printf("select is erron!\n");
}
if(ret == 0)
{
printf("timeout.\n");
}else if(FD_ISSET(fd,&rds))
{
ret = read(fd,&key_value,sizeof(key_value));
if(ret != sizeof(key_value))
{
printf("read button is errno!\n");
continue;
}else
{
printf("button_value: %d\n",key_value);
}
}
}
close(fd);
}
为什么会出现这么奇怪的问题呢??还请各位大虾指点。
文章评论

共有 5 条评论

  1. bolsdog 于 2010-10-08 21:09:26发表:

    帮顶下

  2. 308534826 于 2010-10-08 20:02:24发表:

    问题还是没能解决:0wszxc

  3. 308534826 于 2010-10-08 20:01:15发表:

    哦,是我复制代码的时候弄错了~,上面第一个程序的open也是打开/dev/button的。(o):tx

  4. 308534826 于 2010-10-08 19:44:57发表:

    汗死....谢谢!!

  5. 绿色圣光 于 2010-10-08 19:14:14发表:

    /dev/buttons
    /dev/button
    貌似两个不一样吧?