gpt4 book ai didi

c++ - 由于 read() block ,无法观看多个目录

转载 作者:行者123 更新时间:2023-11-28 08:03:53 24 4
gpt4 key购买 nike

我的问题是我使用 inotify 监视多个目录并使用 read() 函数读取任何更改。我的观点是,我无法“同时”(“for”循环)观看所有这些目录,因为 read() 函数会停止程序,直到当前观看的目录发生某些事情。

有简化的“主要”代码:

while (1){

for(int i = 0; i < numberOfDirectories; i++){

string fileEnd = get_event(fd[i], catalogs[i]).c_str());
if(string != "") do some code;

}
sleep(1);
}

其中 get_event 返回更改文件的路径,fd[i] 是 inotify 的实例,catalogs[i] 包含监视目录的名称。

还有一些 get_even 函数的代码:

#define BUFF_SIZE ((sizeof(struct inotify_event)+FILENAME_MAX)*1024)
string get_event(int fd, string target)
{
ssize_t len;
char buff[BUFF_SIZE] = {0};

len = read (fd, buff, BUFF_SIZE);

此时主“for”循环停止工作并等待第一个目录中发生某些事情。我只想检查监视目录中是否有任何更改,而不是等待更改。

帮助:<

最佳答案

如果您使用的是 LINUX/UNIX,则可以使用 SELECT 来监视多个文件描述符的新更改。无论哪个先发生变化,都会打破阻塞等待,给你变化的描述符的编号,让你处理,然后你再监视它就可以了。

只要您在调用的描述符集中提供您感兴趣的位置的所有描述符,它就可以让您捕获任何更改,无论它们在哪个描述符上。

关于c++ - 由于 read() block ,无法观看多个目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10722091/

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