·ChinaUnix首页 ·论坛 ·博客 
Linux首页 | Linux新闻 | Linux文档 | Linux论坛 | Linux下载 | Linux博客 | Linux搜索
新手入门 | 安装启动 | 管理员指南 | 开发手册 | 桌面应用 | 程序开发 | 数据库 | 网络技术| CentOS | Fedora | MySQL | Apache | Ubuntu | Gentoo| OSCON08
  Linux时代 >> 技术文档 >> 安装启动
 
Linux系统环境下如何获得U盘拔插的信息
来源: ChinaUnix博客  日期: 2008.04.01 14:18 (共有条评论) 我要评论
 

来源:赛迪网    作者:刚子

获得U盘的插入或者拔取得信息的传统方法是在内核级运行hotplug程序,相关参数通过环境变量传递过来,再由hotplug通知其他关注hotplug的应用程序。这样的做法效率有些低,现在通过一种特殊类型的socket netlink实现获取U盘拔插的信息。netlink专门用于内核空间和用户空间的异步通信。
下面的例子可以监听内核的hotplug事件,源代码如下:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#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

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/31/showart_513716.html
  发表评论 查看评论(共有条评论) 我要提问
 
 


最新资讯更多>> 
· 番茄花园事件给我们的反思
· 红帽收购Qumranet加强虚拟化领..
· Debian 下一个稳定版的代号被确..
· 发行版发布:Mandriva Linux 2..
· Sun VirtualBox v2.0 发布
· Ubuntu Linux用户突破800万
· Mandriva Linux 2009 RC 1 发布
· 构建Linux版本的谷歌Chrome浏览器
· 发行版发布:Scientific Linux..
· BSD发行版:DragonFly BSD 2.1..
论坛热点更多>> 
· 奔腾老机器16M内存,还能用什..
· 【经典】我是一条内存
· 刚接到通知
· 建议!
· 下班我们部门KTV有美女陪 o(..
· 中秋都有什么打算啊
· 誰懂裝修啊,來幫幫忙
· UNIX环境高级编程这本书怎么样?
· 真实的战争~~~~来晚的已经没..
· 《深入理解Linux网络内幕》原..
文档更新更多>> 
· 用YUM升级CentOS系统中PHP和MySQL
· [转]Red Hat Linux 安全设置指南
· 使用Emacs作为文件管理器
· linux内核的移植与遭遇问题的解决
· KStar 校园网锐捷认证GUI版
· 给eclipse安装CDT插件开发C/C++工程
· ubuntu 8.10 安装 Lotus Symphony
· fsck命令
· RHEL5的kickstart中的%packages部..
· linux 线程实现机制分析
 
关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 友情链接 | 免费注册

Copyright © 2001-2008 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们