inotify监听/sys/bus/usb/drivers/usb/
时间: 2023-08-23 10:06:33 浏览: 152
是的,你可以使用inotify来监听 `/sys/bus/usb/drivers/usb/` 目录。当该目录中的文件发生变化时,你可以通过inotify接收到通知。具体实现方式如下:
1. 调用 `inotify_init()` 函数创建inotify实例,得到一个文件描述符。
2. 使用 `inotify_add_watch()` 函数将 `/sys/bus/usb/drivers/usb/` 目录添加到inotify实例中,得到一个监视器的文件描述符。
3. 使用 `read()` 函数从inotify实例的文件描述符中读取事件通知。
4. 解析读取到的事件通知,判断是否为 `/sys/bus/usb/drivers/usb/` 目录中的文件发生变化的事件通知。
5. 如果是 `/sys/bus/usb/drivers/usb/` 目录中的文件发生变化的事件通知,对应的处理逻辑。
注意,为了实现成功监听 `/sys/bus/usb/drivers/usb/` 目录下的文件变化,你需要保证该目录所在的文件系统挂载时支持inotify机制。同时,你需要保证该目录所在的文件系统有足够的权限访问。
相关问题
inotify通过/sys/bus/usb/drivers/usb/检测设备插拔,请用C语言写出程序
好的,以下是一个使用inotify监视/sys/bus/usb/drivers/usb/目录的C语言程序,以检测USB设备的插拔事件:
```c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/inotify.h>
#define EVENT_SIZE (sizeof (struct inotify_event))
#define BUF_LEN (1024 * (EVENT_SIZE + 16))
int main(int argc, char **argv) {
int fd, wd;
char buf[BUF_LEN];
ssize_t len;
struct inotify_event *event;
fd = inotify_init();
if (fd < 0) {
perror("inotify_init");
return errno;
}
wd = inotify_add_watch(fd, "/sys/bus/usb/drivers/usb/", IN_CREATE | IN_DELETE);
if (wd < 0) {
perror("inotify_add_watch");
return errno;
}
while (1) {
len = read(fd, buf, BUF_LEN);
if (len < 0) {
perror("read");
return errno;
}
for (char *ptr = buf; ptr < buf + len; ptr += EVENT_SIZE + event->len) {
event = (struct inotify_event *) ptr;
if (event->mask & IN_CREATE) {
printf("Device inserted: %s\n", event->name);
} else if (event->mask & IN_DELETE) {
printf("Device removed: %s\n", event->name);
}
}
}
inotify_rm_watch(fd, wd);
close(fd);
return 0;
}
```
该程序使用inotify监视/sys/bus/usb/drivers/usb/目录,并添加了IN_CREATE和IN_DELETE标志,以便在设备插入或拔出时接收事件。当收到事件时,程序会打印出设备的名称。程序将一直运行,直到手动停止。
cat /proc/sys/fs/inotify/max_user_watches
这是一个 Linux 系统下的命令,用于查看当前系统中 inotify 监听器所能监视的最大文件数。通常情况下,该值的默认值是 8192。如果你需要增加这个值,可以编辑 /etc/sysctl.conf 文件并添加以下行:
```
fs.inotify.max_user_watches=数量
```
其中,数量就是你想要设置的最大文件数。保存并退出后,执行以下命令使其生效:
```
sudo sysctl -p
```
阅读全文