ubuntu18.0.4.3(desktop)监测U盘的热插拔事件

一、客户需求:基于隐私安全问题,设备到客户,是离线运行的,现在客户想更新设备显示内容,想插上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);

三、代码运行结果如下,可以监听到热插拔

onMount事件
main函数
运行结果

四、可以使用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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 使用U盘系统制作工具 不要使用ultraISO工具 使用easyBCD或者Universal-USB-Instal...
    QoioQ阅读 3,948评论 0 1
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,505评论 0 10
  • nodejs事件循环与多进程 why 事件循环对于深入理解nodejs异步至关重要fs, net,http,eve...
    强某某阅读 919评论 0 2
  • 前言 React17自去年十月发布以来,出现了几个比较重要的变化。首先,17作为一个过渡版本,其明确了在react...
    维李设论阅读 596评论 0 1
  • 进程间使用D-Bus通信 D-Bus是一种高级的进程间通信机制,它由freedesktop.org项目提供,使用G...
    WB莫遥燚阅读 22,135评论 0 7