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

时间:2011-08-12 14:58:36

标签: c linux unix udev

我在Linux系统上用C编码。我想插入一个USB闪存驱动器,让udev创建dev节点(例如,在/ 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 个答案:

答案 0 :(得分:2)

您可能需要查看标准库中的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 */
}

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

干杯。

答案 1 :(得分:1)

您可能想要使用udev规则。

Running external programs upon certain events

  

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