首页 文章

如何检测或测试unix / linux dev节点创建usb闪存驱动器插入

提问于
浏览
2

我在Linux系统上用C编码 . 我想插入一个USB闪存驱动器,让udev创建开发节点(例如/ dev / sdc和/ dev / sdc1),并仅在出现/ dev / sdc时执行操作 . 我一直在做的是把它当作我的C应用程序中的等待循环,等待udev守护进程创建一个dev节点 . 类似于以下内容:

if( /* /dev/sdc exists */)
{
  do_something();
}
else
{
  wait();
}

我的第一个问题是,在我的if()测试中,C库函数可以返回“/ dev / sdc exists”的值 . 我的第二个问题是,我只是错误地接近了这个问题吗?我应该使用udev监视器结构直接从udev检测到这个吗?

2 回答

  • 1

    您可能需要查看标准库中的fstat() . 这允许您对文件的存在/不存在进行快速而肮脏的检查并对其进行操作 . 基本上你需要:

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    
    ....
    
    struct stat s;
    stat( "/pat/to/node" , &s );
    if ( IS_BLK(s.st_mode) ) {
        /* the file exists and is a block device */
    }
    

    这不是一个优雅的解决方案,但回答你的问题 . 代码可能需要一些调整,因为我没有尝试,但它应该做的伎俩 .

    干杯 .

  • 2

    您可能想要使用udev规则 .

    Running external programs upon certain events

    编写udev规则的另一个原因是在连接或断开设备时运行特定程序 . 例如,您可能希望执行脚本以在连接时自动从数码相机下载所有照片 .

相关问题