linux 2.6 usb自动检测

    嵌入式开发,要对USB设备进行管理。在linux 2.4 下插入USB设备可以从系统配置文件/proc/scsi/usb-storage*/* 中读出USB设备的插入状态,该文件最好一行Attached为yes就是已经插上USB设备了,若为no就是没有插上。现在linux 2.6下,并没有/proc/scsi/usb-storage*/* 文件,但有/proc/scsi/usb-storage/* 文件,该文件的内容和linux 2.4下/proc/scsi/usb-storage*/*  文件的内容类似,但二者最后一行不一致。linux 2.6下文件最后一行为:Quirks: 。这样我就没法从这个文件里得到Attached的信息来判断U盘是否已插上!
  还有每次插入U盘的时候,/proc/scsi/usb-storage/* ,*的文件名总是不一样,这样想读到这个文件中的内容是不是必须得插上U盘后先遍历/proc/scsi/usb-storage/路径,找出该路径下的文件名,然后再读该文件的内容来获取信息?

 

如下代码是从别人的博客上看到的实现USB事件的监测

#include <stdlib.h> #include <sys/msg.h>
#include
<sys/ipc.h>
#include
<sys/types.h>
#include
<string.h>#define MSG_KEY     0x780078 //定义IPC消息key

//定义IPC消息传送的内容
typedef struct _msgcontent{
    
char szAction[64];   //USB产生的动作
     char szDevice[64]; //USB设备名称
}UMSGCONTENT; typedef struct _umsg{
    
long msgtype;
     UMSGCONTENT content;
}UMSG;

int main(){
    
char *pDevice,*pAction;
     UMSG umsg;
    
int msgid;
    
if((msgid = msgget(MSG_KEY,IPC_CREAT|0666))==-1) return 1; //取得IPC管道            
     pAction = getenv("ACTION"); //取得udev产生的动作,
     pDevice = getenv("DEVNAME");//取得设备名称如/dev/sda
     umsg.msgtype = 1;
     strcpy(umsg.content.szAction,pAction);
     strcpy(umsg.content.szDevice,pDevice);
     msgsnd(msgid,
&umsg,sizeof(UMSGCONTENT),IPC_NOWAIT);
    
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值