获得U盘的插入或者拔取得信息的传统方法是在内核级运行hotplug程序,相关参数通过环境变量传递过来,再由hotplug通知其他关注hotplug的应用程序。这样的做法效率有些低,现在通过一种特殊类型的socket netlink实现获取U盘拔插的信息。netlink专门用于内核空间和用户空间的异步通信。
下面的例子可以监听内核的hotplug事件,源代码如下:
socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);
if (hotplug_sock == -1) {
printf("error getting socket: %s", strerror(errno));
return -1;
}
/* set receive buffersize */
setsockopt(hotplug_sock, SOL_SOCKET, SO_RCVBUFFORCE,
&buffersize, sizeof(buffersize));
retval = bind(hotplug_sock,
(struct sockaddr *) &snl,
sizeof(struct sockaddr_nl));
if (retval < 0) {
printf("bind failed: %s", strerror(errno));
close(hotplug_sock);
hotplug_sock = -1;
return -1;
}
return hotplug_sock;
}
【51CTO编者注:其实如果是在Linux的字符环境下插上USB有时会有没有反应的情况,我们这时如何才能知道USB的实时状况呢?很简单一条命令就可以轻松搞定:
#Fdisk -l
下面是命令执行后的返回结果:
[root@new-host ~]# fdisk -l Disk /dev/sda: 80.0 GB, 80026361856 bytes Device Boot Start End Blocks Id System Partition table entries are not in disk order Disk /dev/sdb: 1010 MB, 1010826752 bytes Device Boot Start End Blocks Id System |
其中最下面部分的的“Disk /dev/sdb: 1010 MB, 1010826752 bytes”显示了U盘的容量大约为1Gb,下面是相对应的设备号“/dev/sdb1 ”。这时再结合mount命令就可以知道次设备是否已经自动加载到文件系统下,如果没有就可以使用mount 命令手动加载设备而就可以正常使用了。】
【相关文章】
|
||||
| · Windows Server 2008专.. · 华为员工自杀频频拷问.. · 勇闯IT培训黑色围城 · CISSP认证成长之路 · 解析35岁技术人的价值.. · 网络工程师职业规划与.. · LAMP技术精解 · AMD Phenom三核处理器.. |
· 充电计划之热门IT认证.. · 如何有效防御SQL注入攻.. · 2008年上半年全国软考.. · 选择适合自己的IT认证 · IPv6协议--拓展网络无.. · 了解统一威胁管理(UTM).. · 调查:十大发现 解秘技.. · 技术人求职简历完备手册 |
|||
|
||||
| · SQL Server 2008/2005.. · SOA 面向服务架构 · SQL Server 2008/2005.. · iSCSI应用与发展 · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Apache技术专题 |
· 国际文档格式标准开战 · 路由器设置与口令恢复 · 打造安全服务器 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 · 了解统一威胁管理(UTM).. · 专题:AIX操作系统管理.. |
|||
|
||||
| · iSCSI应用与发展 · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · iSCSI应用与发展 · 三层交换技术专题 · Apache技术专题 |
· 企业数据恢复指南 · 路由器设置与口令恢复 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 · 访问控制列表(ACL)介绍 · PHP开发应用手册 · 专题:AIX操作系统管理.. |
|||