一、客户需求:基于隐私安全问题,设备到客户,是离线运行的,现在客户想更新设备显示内容,想插上U盘就可以实现,(就是把U盘的内容copy到指定目录中),这样就不需要联网操作
二、具体实现:查看资料,可利用glib2.0的接口,具体api接口调用如下,但是原理还么有搞清楚,还在梳理,
sudo apt-get install libglib2.0-dev 安装glib2.0
static GMainLoop *loop = g_main_loop_new(NULL, FALSE); //创建一个主循环的对象
GVolumeMonitor * mon=g_volume_monitor_get();//通过gio获取GVolumeMonitor 的对象
//注册2个信号,“mount-added”和“mount-removed”,感觉有点类型qt的信号和槽
g_signal_connect(mon,"mount-added",G_CALLBACK(onMount),NULL);
g_signal_connect(mon,"mount-removed",G_CALLBACK(onUnMount),NULL);
g_main_loop_run (loop);
g_main_loop_unref (loop);
三、代码运行结果如下,可以监听到热插拔
![](https://img.haomeiwen.com/i27111528/872e4e0540c8dc93.png)
![](https://img.haomeiwen.com/i27111528/8a9031a5cc47e40d.png)
![](https://img.haomeiwen.com/i27111528/fe8f7f7b15c07ec6.png)
四、可以使用findmnt命令查看,变量根据自己实际的
MNT_DIR=/media/pi
findmnt -t vfat,exfat,fuseblk,msdos,ntfs,ext2,ext3,ext4 -n -o TARGET -l 2>/dev/null | grep $MNT_DIR
也可以先查下/dev下是否有设备
for d in /dev/sd[^a]*; do dir_usb=$(findmnt -noTarget $d) [ ! -z $dir_usb ] && break done
网友评论