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

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

(0)

相关推荐

  • Linux系统下使用U盘的方法

    在linux系统之中, 一切设备皆文件, 所以我们的U盘也是一个文件.磁盘设备被抽象成sda文件, U盘设备被抽象成sdb文件. 1.查看所有的设备文件. 在linux的文件系统中, /dev中存放着所有的设备文件. cd /dev #进入dev文件夹 ls #查看所有的文件 其中名为sda的系类是磁盘设备, sdb系列是U盘设备. 2.外部设备挂载点 在linux中, 外部设备需要挂载在/mnt文件夹中. cd /mnt #进入/mnt文件夹 ls #列出所有文件, 发现一个也没有 mkdir

  • C++实现Linux下弹出U盘的方法

    本文实例讲述了C++实现Linux下弹出U盘的方法.分享给大家供大家参考.具体如下: 在linux下,对于usb设备,我们一般都是mount上使用,不使用时umount掉就可以了. 在ubuntu10.04中,当我们插入u盘时,会出现u盘设备,当我点击这个设备就可以mount上u盘,并读取里面的文件,当我们不使用时,我们再次点击这个设备就可以弹出这个设备,如果想再次使用U盘,那么就得必须再次插拔u盘才可以. umount和弹出u盘是不同的,umount后我们还可以再次mount上使用,我们的u盘

  • Linux系统下如何挂载FAT32的U盘

    Linux挂载U盘步骤如下 1:将U盘插入USB接口,检查是否插好 2:用fdisk命令检查分区和USB设备信息 [root@wgods ~]# fdisk -l Disk /dev/sda: 1000.2 GB, 1000204886016 bytes255 heads, 63 sectors/track, 121601 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks

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

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

  • 在Linux环境下采用压缩包方式安装JDK 13的方法

    什么是JDK? 好吧如果你不知道这个问题的话我实在是不知道你为什么要装这个东西. JDK(Java Development Kit)是Sun公司(后被Oracle收购)推出的面向对象程序设计语言的开发工具包,拥有这个工具包之后我们就可以使用Java语言进行程序设计和开发. 而今天我们要在Linux环境 下对这个东西进行部署以便能够进行开发,并且是以压缩包解压的方式进行安装,之所以不用rpm方式安装主要是为了能够在所有Linux系统上都通用,rpm和deb最多只能在Red Hat和Debian旗下

  • Windows+Linux系统下Go语言环境安装配置过程

    Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本.现在Go的开发已经是完全开放的,并且拥有一个活跃的社区. 1. Windows安装配置 1️⃣ 下载SDK SDK 的全称是Software Development Kit

  • Linux系统下安装PHP7.3版本

    请先安装依赖包 $ yum install -y gcc gcc-c++  make zlib zlib-devel pcre pcre-devel  libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-

  • linux环境下恢复rm误删的文件方法

    目录 前言 rm之后还有救吗 使用foremost找回文件 使用extundelete找回文件 预防误删引发的事故 总结 前言 一提到在 linux 环境下删除文件,那绝对离不开 sudo rm -rf /* 这个梗,每次看到这个命令,我都想到一幅恶搞的图片: 这个『清理垃圾』的说明真是解释的"恰到好处",据说有小白在论坛问问题,被人开玩笑的回复了 sudo rm -rf /* 这个命令,结果问题就解决了,人也拜拜了~ 从删库到跑路,一天一个入狱小技巧,所以我们一定要谨慎使用 rm -

  • Linux 6下安装编译安装Nginx的步骤

    Linux 6下安装编译安装Nginx的步骤 前言: Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.在高连接并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一.能够支持高达50,000个并发连接数的响应,而且内存开销极小.这也是Nginx广受欢迎的重要原因.本文演示了基于Linux 6下编译安装Nginx,供大家参考. 一.安装环境 # cat /etc/issue Red Ha

  • Linux虚拟机下mysql 5.7安装配置方法图文教程

    记录一下Linux虚拟机下MySQL安装配置方法 一. 下载mysql5.7 http://mirrors.sohu.com/mysql/MySQL-5.7/ Linux下载: 输入命令:wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz 二.建立用户,以及mysql的目录 1.建立一个mysql的组 输入命令: groupadd mysql 2.建立mysql用户,并放到m

  • Linux shell下30个有趣的命令和提示(推荐)

    这些是我收集了多年的Linux shell的30个有趣的命令和提示. 1. 监控命令(每2秒运行一次) watch "ls -larth" 2. 使用一个端口杀死程序 sudo fuser -k 8000/tcp 3. 限制以下命令的内存使用 ulimit -Sv 1000 # 1000 KBs = 1 MB ulimit -Sv unlimited # Remove limit 4. 使用正则表达式重命名所选文件 rename 's/\.bak$/.txt/' *.bak 5. 获得

随机推荐