問答

為什么起亞k2 u盤插上不能聽歌

提問者:TAR772013-05-30 00:00

最佳答案

獲得U盤的插入或者拔取得信息的傳統(tǒng)方法是在內(nèi)核級(jí)運(yùn)行hotplug程序,相關(guān)參數(shù)通過(guò)環(huán)境變量傳遞過(guò)來(lái),再由hotplug通知其他關(guān)注hotplug的應(yīng)用程序。這樣的做法效率有些低,現(xiàn)在通過(guò)一種特殊類型的socketnetlink實(shí)現(xiàn)獲取U盤拔插的信息。netlink專門用于內(nèi)核空間和用戶空間的異步通信。下面的例子可以監(jiān)聽內(nèi)核的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

起亞K5相關(guān)問題

相關(guān)閱讀

起亞K5頻道

報(bào)價(jià):13.98-20.68萬(wàn)
級(jí)別:中型車
排量:1.5T2.0T
變速箱:雙離合自動(dòng)

車友關(guān)注

最新標(biāo)簽

按字母分類:
ABCDEFGHIJKLMNOPQRSTWXYZ0-9