在网上找过很多相关的资料,始终没有找到解决的办法,希望有高人帮忙,下面描述下我的问题
我的ubuntu装在VM上,在里面,USB设备会自动挂载到/media/disk中,用df -hl命令查看得到如下结果:
/dev/sdb 1.9G……(省略中间可用空间等的显示) /media/disk
用ls -l /dev/sdb命令,得到如下结果:
brw-rw---- 1 root disk 8 , 16 2010-05-20 14:16 /dev/sdb
之后,写了个简单的test程序,来访问/dev/sdb,获得句柄,代码如下:
int main(void)
{
int fd = open("/dev/sdb", O_WRONLY|O_DIRECT);
printf("The file handle is:%x\n",fd);
if(fd == -1) close(fd);
close(fd);
printf("The file is closed, open again\n");
fd = open("/dev/sdb", O_WRONLY|O_DIRECT);
printf("The file handle is:%x\n",fd);
if(fd == -1) close(fd);
close(fd);
}
好了,运行程序的时候,输出的结果为:
The file handle is:ffffffff
The file is closed, open again
The file handle is:ffffffff
说明文件打开失败,fd的值为-1。
后来自己觉得可能是权限问题,在运行test程序前,先执行了如下命令:
sudo chmod 777 /dev/sdb
然后用ls -l /dev/sdb命令查看,得到如下结果:(即为/dev/sdb的权限全开)
brwxrwxrwx 1 root disk 8 , 16 2010-05-20 14:16 /dev/sdb
之后再次运行test程序,输出结果如下:
The file handle is:3
The file is closed, open again
The file handle is:3
(注:不同机器得到的fd值可能不一样,但肯定不为-1)
这说明文件成功打开了,获得了正确的文件标示,本来以为大功告成,可是问题来了
我再次运行test程序的时候,文件又打开失败,结果和未修改权限一样……
后来查明原因,在使用sudo chmod 777 /dev/sdb修改权限后,运行test程序得到正确结果后,权限又会还原为之前的状态,即运行完test程序后,使用ls -l /dev/sdb查看,结果会自动还原为如下状态:
brw-rw---- 1 root disk 8 , 16 2010-05-20 14:16 /dev/sdb
这样一来,每次运行test程序,都要做权限修改~~
我不知道这个问题是不是跟mount方式有关,能不能有办法让usb挂载上去的时候,直接就是brwxrwxrwx的权限状态?我试过在mount的时候 -o 里面设置umask,dmask,fmask等参数,但是不奏效,希望有达人可以帮忙解决~
我在编写ubuntu下的一个程序,这个问题不解决,我后面的事都没法做了,希望知道的高手尽快帮我解答,谢谢
关于编写程序访问usb设备的问题,请高手解答
-
- 帖子: 16
- 注册时间: 2010-02-03 9:50
- wangdu2002
- 帖子: 13284
- 注册时间: 2008-12-13 19:39
- 来自: 物华天宝人杰地灵
Re: 关于编写程序访问usb设备的问题,请高手解答
干脆加个启动脚本,运行程序前专门改权限。。。 

行到水穷处,坐看云起时。
海内生明月,天涯共此夕。
--------------------吾本独!
海内生明月,天涯共此夕。
--------------------吾本独!