我在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中检测到这个吗?
答案 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规则的另一个原因是在连接或断开设备时运行特定程序。例如,您可能希望执行一个脚本,以便在连接时自动从数码相机下载所有照片。