数据恢复 杭州站:杭州市文三路388号钱江科技大厦1016室  电话:0571-85121630 房先生
  数据恢复 温州站:飞霞南路朝霞大楼B幢一楼中五号  电话:0577-88844613 叶先生
  数据恢复 宁波站:海曙区药行街31号灵桥广场4楼C12 电话:0574-87196361 单先生
IT业热闻  
 
·思科IOS系统存在漏洞 计划
·互联网散布黄图 青海首起黑
·黑客盗走“哈利·波特”大
·美五角大楼国防部遭网络攻
·金山毒霸6增强版未获销售许
·Vista发布6个月共有27个安
·微软新补丁与Outlook冲突 
·电话支付种类繁多市场发展
·黑客瞄准谷歌商业广告 故伎
·美国农业部网站数据库漏洞
更多...
病毒预告  
 
·中国2006年度安全报告 新病
·“爱慕波”和“QQ谍”
·“戴得乐”和“搀嘴夫”
·电脑病毒“挪威客”又现新
·IE+雅虎邮件=新安全漏洞?小
·微软联手熊猫反病毒 推Pro
·Linux与视窗谁更安全?最新
·病毒引发的异常现象
更多...
热点文章  
 

·IBM机器报错信息及解决方法
·谈谈硬盘出现物理坏道的迹
·数据恢复点滴经验谈
·Google购买以色列博士生搜
·ibm600x/600e电池电芯更换
·硬盘数据拯救全攻略
·硬盘零磁道与分区表的修复
·微软最新安全补丁不完善 惠
·故障硬盘数据拯救全攻略
·硬盘的数据结构

Linux系统环境下如何获得U盘拔插的信息 
 
来源: 发布时间:2009-4-27 9:54:16 点击次数: 

获得U盘的插入或者拔取得信息的传统方法是在内核级运行hotplug程序,相关参数通过环境变量传递过来,再由hotplug通知其他关注hotplug的应用程序。这样的做法效率有些低,现在通过一种特殊类型的socket netlink实现获取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>

#define UEVENT_BUFFER_SIZE 2048

static int init_hotplug_sock(void);

int main(int argc, char* argv[])
{
int hotplug_sock = init_hotplug_sock();
while(1){
char buf[UEVENT_BUFFER_SIZE*2] = {0};
recv(hotplug_sock, &buf, sizeof(buf), 0); 
printf("%s\n", buf);

}
return 0;
}

static int init_hotplug_sock(void)
{
struct sockaddr_nl snl;
const int buffersize = 16 * 1024 * 1024;
int retval;

memset(&snl, 0x00, sizeof(struct sockaddr_nl));
snl.nl_family = AF_NETLINK;
snl.nl_pid = getpid();
snl.nl_groups = 1;
int hotplug_sock = 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;
}
关于我们 | 联系我们 | 网站地图 | 友情链接 | 订单查询
杭州回天数据恢复中心:杭州市文三路388号钱江科技大厦1016室 客服热线:0571-85125595 85121630
Copyright © 2001-2008 回天数据恢复中心 All Rights Reserved E-mail:webmaster@tzwr.com
浙ICP05036415号