Linux系统环境下如何获得U盘拔插的信息_unix linux

下面的例子可以监听内核的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; 

 

时间: 2024-10-14 17:57:19

Linux系统环境下如何获得U盘拔插的信息_unix linux的相关文章

Linux系统下如何使用U盘?

  一.插入u盘到计算机,如果目前只插入了一个U盘而且你的硬盘不是scsi的硬盘接口的话,那它的硬件名称为:sda1. 二.在mnt目录下先建立一个u的目录. 三.然后命令提示符#后输入:mount -t vfat /dev/sda1 /mnt/u. 四.卸载时用umount /mnt/u. 这就是最简单的Linux系统下使用U盘的技巧.当然现在的Linux最新发行版都是可以自动识别U盘和加载了,像ubuntu10.04和slitaz3.0,都是自动加载.

Linux系统环境下安装Oracle 10g的困难

在linux下安装oracle是一件令人生畏的事情,其复杂程度远远超过安装linux操作系统本身.如果能够进行成功的安装oracle,那么同时也就顺便掌握了linux一些技术.本文介绍在redhat linux 下安装oracle 10g 的方法.在这里说明一下,Oracle 10g的g是grid 的缩写,意为网格,目前较为前沿的网络计算技术. Oracle 10g 对软硬件的要求都非常的高,所以要玩转的话的花不少银子.首先来看看它对硬件的要求:内存512兆(建议1G),cpu 主频2.0G以上

Linux操作系统中安装和试用IE、Office等软件_unix linux

听说出了一种新的Linux中文版本,LinXP,可以在Linux下运行IE6.0 及Office 2000,PhotoShop 7等Windows应用软件,太好了,其实用Windows软件大家主要还是因为许多常用的应用软件如IE,Office 等只能在Windows下运行,而Windows经常出现的蓝屏.死机.网络病毒让人叫哭不迭,如果能在Linux下运行这些常用的应用软件,又能享受Linux稳定的内核,强大的网络的安全性,无疑对广大的用户来说又多了一种新的选择.(可以躲过一浪接一浪的网络病毒攻

Linux tar 压缩打包命令使用方法第1/2页_unix linux

tar命令  [root@linux ~]# tar [-cxtzjvfpPN] 文件与目录 -. 参数: -c :建立一个压缩文件的参数指令(create 的意思): -x :解开一个压缩文件的参数指令! -t :查看 tarfile 里面的文件! 特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在! 因为不可能同时压缩与解压缩. -z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩? -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩

在Linux系统环境下配置java编译环境

首先从sun下载jdk1.5*.bin 一.java安装 #./jdk*.bin 选择yes就ok了 二.java环境变量的设置 export JAVA_HOME=/usr/local/jdk1.5 export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/mysql_connector.jar:$JAVA_HOME/jre/lib export PATH=$PATH

Linux 下rename 命令的用法第1/2页_unix linux

 首先来说一下mv命令,在man mv中我们可以看到对于mv命令的介绍是这样的: mv -move(rename) files 可以看到mv命令确实有重命名的功能,但是实际应用中,它只能对单个文件重命名,命令如下: mv [path/]oldfilename [path/]newfilename "mv命令只能对单个文件重命名",这实就是mv命令和rename命令的在重命名方面的根本区别. 再来说rename命令,在man rename的说明如下: NAME rename -Renam

FreeBSD6.1Release下利用route和ipfilter架设路由的方法_unix linux

架设此服务器,使内网用户通过本服务器与外界通讯:基本原理为内网用户通过FreeBSD内自带的网关路由功能(route)与外网进行通讯,服务器的安全性及病毒的防护控制通过FreeBSD的ipfilter来完成.初步架设过程如下: 网卡接口说明:vr0:外网网卡接口vr1:内网网卡接口 1.    最小化安装FreeBSD6.1Release从ftp://ftp.FreeBSD.org/pub/FreeBSD/下载FreeBSD6.1Release镜像文件,然后刻成光盘,将服务器设置成从光驱启动,开

浅析Linux下一个简单的多线程互斥锁的例子_unix linux

复制代码 代码如下: #include <stdio.h>#include <pthread.h>pthread_mutex_t Device_mutex ;int count=0;void thread_func1(){   while(1)   {       pthread_mutex_lock(&Device_mutex);       printf("thread1: %d\n",count);       pthread_mutex_unlo

Linux目录结构以及目录内的主要内容详细解析_unix linux

"/"根目录部分有以下子目录:/usr 目录包含所有的命令.程序库.文档和其它文件.这些文件在正常操作中不会被改变的.这个目录也包含你的Linux发行版本的主要的应用程序,譬如,Netscape. /var 目录包含在正常操作中被改变的文件:假脱机文件.记录文件.加锁文件.临时文件和页格式化文件等 /home 目录包含用户的文件:参数设置文件.个性化文件.文档.数据.EMAIL.缓存数据等.这个目录在系统省级时应该保留. /proc 目录整个包含虚幻的文件.它们实际上并不存在磁盘上,也