gpt4 book ai didi

c - 我对读取事件的 inotify_add_watch 有疑问

转载 作者:太空宇宙 更新时间:2023-11-04 09:59:35 27 4
gpt4 key购买 nike

我不明白inotify事件的进展。我知道 inotify_init 是创建新的 inotify 实例。并返回文件描述符。此时。文件描述符是关于什么的?

在我的代码中,函数 inotify_add_watch 如下所示

wd = inotify_add_watch ( inotifyFd, argv[j], IN_ALL_EVENTS),

在循环中被调用。

如果我在命令中再输入 2 个文件,这个循环将重复 2 次以上。然后变量 wd 将被覆盖。而 intofiyFd 总是有相同的数字。因为这些不是数组。那么,如何区分另外2个文件呢?

我已经了解了

int main (int argc, char *argv[])
{

int inotifyFd, wd, j;
char buf[BUF_LEN];
ssize_t numRead;
char *p;
struct inotify_event *event;

inotifyFd = inotify_init();

for(j = 1; j < argc; j++)
{
wd = inotify_add_watch(inotifyFd, argv[j], IN_ALL_EVENTS);
printf("Watching %s using wd %d\n", argv[j], wd);
}

for(;;)
{
numRead = read(inotifyFd, buf, BUF_LEN);
if(numRead == 0)
fatal("read() from inotify fd returned 0!");

printf("Read %ld bytes from inotify fd\n", (long) numRead);

for( p = buf; p < buf+numRead; )
{
event = (struct inotify_event *) p;
displayInotifyEvent(event);

p+= sizeof(struct inotify_event) + event->len;
}
}

return 0;
}

.

./demoinotify dir1 dir2 &
[1] 5386
Watching dir1 using wd1
watching dir2 using wd2

最佳答案

inotify_init() is to create new inotify instatance. and it returns file descriptor. at this time. for what is file descriptor about?

它返回一个特殊的文件描述符,它不引用文件系统中的任何真实文件。就像 pipe()epoll_create() 等。您使用该文件从中读取 inotify 事件。它也是可轮询的。

wd = inotify_add_watch ( inotifyFd, argv[j], IN_ALL_EVENTS), is called in for the loop. If I input 2 more files in command, this loop will be repeated 2 times more. and then variable wd will be OVERWRITED.

然后不要覆盖它。将其返回值保存到数组中。

int *wd = calloc(argc, sizeof *wd);
...
wd[j] = inotify_add_watch(inotifyFd, argv[j], ...);

请注意,inotify_add_watch 的返回值不是文件描述符,而是 watch 描述符 [1]。

How can it differentiate 2 more files?

将您从 inotify 文件描述符中读取的 inotify_eventwd 字段与您在上面保存的 inotify_add_watch 的返回值进行比较。

[1] 如果您查看 /proc/PID/fdinfo/FD,其中 FD 是您的 inotifyFd,您将查看列出的所有与其关联的监视描述符。该格式记录在 proc(5) 联机帮助页中。

关于c - 我对读取事件的 inotify_add_watch 有疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57444371/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com