我正在用C编写一个linux系统。 我想插入一个USB闪存驱动器,让udev创build开发节点(例如在/ dev / sdc和/ dev / sdc1),并且只有在/ dev / sdc出现时才采取行动。 我一直在做的是把它看作是我的C应用程序中的一个等待循环,等待一个由udev守护进程创build的开发节点。 像下面这样:
if( /* /dev/sdc exists */) { do_something(); } else { wait(); }
我的第一个问题是,什么C库函数可以在我的if()testing中返回值为“/ dev / sdc exists”。 我的第二个问题是,我是否错误地接近了这个问题? 我应该使用udev监视器结构来从udev直接检测到这个吗?
你可能想看看标准库中的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 */ }
这不是一个优雅的解决方案,但回答你的问题。 代码可能需要一些调整,因为我没有尝试,但它应该做的伎俩。
干杯。
你可能想要使用udev规则。
在某些事件中运行外部程序
编写udev规则的另一个原因是在设备连接或断开连接时运行特定的程序。 例如,您可能需要执行脚本,以便在数码相机连接时自动下载所有照片。