提问者:TAR772013-05-30 00:00
获得U盘的插入或者拔取得信息的传统方法是在内核级运行hotplug程序,相关参数通过环境变量传递过来,再由hotplug通知其他关注hotplug的应用程序。这样的做法效率有些低,现在通过一种特殊类型的socketnetlink实现获取U盘拔插的信息。netlink专门用于内核空间和用户空间的异步通信。下面的例子可以监听内核的hotplug事件,源代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<sys/un.h>
#include<sys/ioctl.h>
#include<sys/socket.h>
#include<linux/types.h>
#include<linux/netlink.h>
#include<errno.h>#defineUEVENT_BUFFER_SIZE2048staticintinit_hotplug_sock(void);intmain(intargc,char*argv[])
{
inthotplug_sock=init_hotplug_sock();
while(1){
charbuf[UEVENT_BUFFER_SIZE*2]={0};
recv(hotplug_sock,&buf,sizeof(buf),0);
printf("%s
",buf);}
return0;
}staticintinit_hotplug_sock(void)
{
structsockaddr_nlsnl;
constintbuffersize=16*1024*1024;
intretval;memset(&snl,0x00,sizeof(structsockaddr_nl));
snl.nl_family=AF_NETLINK;
snl.nl_pid=getpid();
snl.nl_groups=1;
inthotplug_sock=socket(PF_NETLINK,SOCK_DGRAM,NETLINK_KOBJECT_UEVENT);if(hotplug_sock==-1){
printf("errorgettingsocket:%s",strerror(errno));
return-1;
}/*setreceivebuffersize*/
setsockopt(hotplug_sock,SOL_SOCKET,SO_RCVBUFFORCE,&buffersize,sizeof(buffersize));
retval=bind(hotplug_sock,(structsockaddr*)&snl,sizeof(structsockaddr_nl));if(retval<0){
printf("bindfailed:%s",strerror(errno));
close(hotplug_sock);
hotplug_sock=-1;
return-1;
}returnhotplug_sock;
}
回答者:lukiii2016-05-30 00:00
MPEG试一下
提问者:xl78173882013-03-31
有两种选择: 第一:汽车有导航的话,直接连接手机蓝牙 第二:用Iphone专线连接进USB口,自动识别手机歌曲 第三:用转换线,连接手机耳机,用手机播放音乐,利用车的音响作为扬声器
提问者:pwxls2013-06-16
可以的。不过电脑以外的设置对U盘的兼容性不是很好,就是可能只识别几种U盘,这个需要多尝试哪个可用在CD上了。U盘的格式最好格成通用的FAT32格式,另外,一些U盘本身就是不支持电脑以外设备的。
提问者:ysbrt2013-07-03
AVI格式 使qq音乐下载音乐就行啊
提问者:aiaixiaoxie2016-03-25
有USB接口的,直接插上
提问者:ls7517284012013-10-10
Empty USB是指的空的文件目录啊,呵呵 我的车也是智跑的。 应该是自动识别的,我的N97接在智跑上都可以自己找到目录的,文件夹比你的多多了 你在电脑下看看是不是文件夹被隐藏啦 ?
提问者:mdigng2013-06-07