问题标签 [kqueue]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2580 浏览

c - 尝试在 linux mint debian 中使用 Kqueue

我正在尝试使用 kqueue 在 c 中做一个面向事件的服务器,当我编译我的代码时它给了我这个错误

致命错误:sys/event.h:没有这样的文件或目录

根据我正在遵循的创建文件必须包含的 kqueue 事件的教程,我是 C 中事件编程的新手

0 投票
1 回答
434 浏览

c++ - KQUEUE 仅适用于文件夹路径?

我正在使用以下代码(实际上是从这里复制的FSEvents C++ 示例),但它只能用于路径,不能用于文件。我只想监视一个特定的文件。我怎样才能做到这一点?谢谢

0 投票
0 回答
255 浏览

objective-c - FSEvents API 和 kqueue 导致实际内存快速上升和应用程序挂起

我想监视文件夹的变化。我也可以使用 FSEvents 或 kqueue,但问题是当我监视一个包含大量 JPG 图像的文件夹(我用 100 张照片进行测试)时,内存增长得如此之快(一个小应用程序超过 2GB)。我看到在使用 Instruments 进行分析时分配了很多 ImageIO。

这是仪器的屏幕截图。

我不知道为什么 ImageIO 在这里分配了这么多。

我从这里得到了 kqueue 教程: http ://www.davidhamrick.com/2011/10/09/kqueue-in-cocoa.html

任何经验、指南或建议将不胜感激。

0 投票
1 回答
318 浏览

macos - 在给定文件描述符的情况下,确定 POSIX/OS X 上文件大小的可靠方法

我写了一个函数来观察一个文件(给定一个 fd)增长到一定大小,包括超时。我正在使用kqueue()/kevent()等待文件“扩展”,但是在收到文件增长的通知后,我必须检查文件大小(并将其与所需大小进行比较)。这似乎很容易,但我无法找到一种在 POSIX 中可靠地做到这一点的方法。

注意:如果文件在指定的时间内完全没有增长,则会超时。因此,这不是绝对超时,只是文件发生一些增长的超时。我在 OS X 上,但这个问题是针对“每个具有kevent()/的 POSIX kqueue()”的,我认为应该是 OS X 和 BSD。

这是我当前的函数版本:

所以基本算法的工作方式如下:

  1. 设置 kevent
  2. 检查尺寸
  3. 等待文件增长

重复步骤 2 和 3,直到文件达到所需大小。

该代码使用一个函数,该函数int evaluate_fd_size(int fd, off_t wanted_size)将返回< 0“发生了一些错误或文件大于所需”、== 0“文件还不够大”或> 0文件已达到所需大小。

显然,这只有evaluate_fd_size在确定文件大小时才有效。我的第一个尝试是用它来实现它off_t eof_pos = lseek(fd, 0, SEEK_END)eof_poswanted_size. 不幸的是,lseek似乎缓存了结果。所以即使kevent返回NOTE_EXTEND,所以文件变大了,结果可能是一样的!然后我想切换到fstat发现也有fstat缓存的文章。

我尝试的最后一件事是以前使用fsync(fd);off_t eof_pos = lseek(fd, 0, SEEK_END);,突然事情开始起作用了。但:

  1. 没有什么能fsync()真正解决我的问题
  2. 我不想fsync()因为性能

编辑:这真的很难重现,但我看到了一个fsync()没有帮助的案例。NOTE_EXTEND事件命中用户空间后,文件大小变大似乎需要(很少)时间。fsync()可能只是足够好sleep(),因此它在大多数情况下都有效:-。

所以,换句话说:如何在 POSIX 中可靠地检查文件大小而不打开/关闭我不能做的文件,因为我不知道文件名。此外,我无法保证这会有所帮助

顺便说一句:int new_fd = dup(fd); off_t eof_pos = lseek(new_fd, 0, SEEK_END); close(new_fd);没有克服缓存问题。

编辑 2: 我还创建了一个多合一的演示程序。如果它Ok, success在退出之前打印,一切都很好。但通常它会打印Timeout (10000000)出显示竞争条件的内容:最后一次触发的 kevent 的文件大小检查小于此时的实际文件大小。奇怪的是,当使用ftruncate()来增加文件而不是write()它似乎工作时(你可以编译测试程序-DUSE_FTRUNCATE来测试它)。

0 投票
1 回答
2719 浏览

freebsd - 递归监视目录以进行文件添加/修改/删除

我需要监视一个包含多个子目录的目录,每个子目录都有我需要监视的文件以进行文件添加、修改和删除。

我找到了一些示例代码,并且不得不稍微修改它以使其正常工作,但它并不能完全满足我的需要。它可以在目录(但不是子目录)中找到文件重命名或删除,但不响应文件修改。

我可以使用谷歌搜索找到的方法是单独监控每个文件;但是,我有数十万个文件要监视,并且为每个文件保留一个文件描述符可能是不明智的。

在 FreeBSD 下有没有办法做我需要做的事情?还是我必须找到替代解决方案?

0 投票
1 回答
350 浏览

sockets - 关闭套接字时是否需要从 epoll/kqueue 注销 fd?

如果我关闭一个套接字,它的 fd 是否会自动从 epoll 和/或 kqueue 中清除?
如果是这样,是否意味着关闭fd时不需要手动注销fd?

实际上我正在使用 Tornado,对此的任何建议也将不胜感激。

0 投票
1 回答
884 浏览

python - 我正确使用 ioctl 吗?

我正在 python3.3 中编写一个 http 服务器,只是为了学习如何做这种事情。在我解析请求的函数中,我想用它fcntl.ioctl来获取我可以在套接字中读取的字节数,并且我只在检查 kqueue 的结果中看到一个 kevent 说有要读取的内容时才这样做插座上。但是每当我尝试打电话时fcntl.ioctl,我都会得到OSError: [Errno 14] Bad address。我究竟做错了什么?此外,这似乎发生在第一次通话中。以下是相关代码:

0 投票
1 回答
242 浏览

python - 仅当套接字接收数据时如何触发kevent?

这里有两个小脚本,展示了我现在如何使用 kevents,并重现了我的问题。

kqtest.py:

kqtesttrigger.py

触发后 kqtest 的输出:

我想要的是仅在将数据添加到套接字时才触发 kevent。我是否需要从 kqueue 中删除 kevent 并重新添加它?

0 投票
2 回答
7503 浏览

ios - How to monitor file change on iOS platform?

i find that there are some libraries to monitor file changes on mac,for example:https://github.com/bdkjones/VDKQueue but i failed to find a library to monitor file changes on ios platform.

could anybody tell me how to monitor file changes in objc wrapper.

thanks

0 投票
1 回答
255 浏览

c - kevent 何时何地可能返回错误?

EV_RECEIPT更改列表(或设置)中的无效项目将导致kevent返回带有EV_ERROR标志集的结果。还有什么其他条件会导致该标志?

谷歌搜索显示EV_RECEIPT支持与“消除错误条件”有关;我想知道这种边缘情况何时适用。

假设更改列表中的错误将首先出现在事件列表中,在实际事件之前是否安全?

如果我们只考虑与套接字相关的过滤器怎么办?