- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我目前在我的 C 代码中使用 inotify() 系统来监视文件系统中某些目录的事件。
现在,使用这些东西之一的过程如下。你取一个整数(比如 event_notifier),使用 inotify_init() 将它变成一个 inotify 描述符,就像这样
event_notifier=inotify_init();
现在,假设我想监视多个目录中的事件。然后我将在这些目录上向这个 event_notifier 添加监视
wd1 = inotify_add_watch(event_notifier,"/../path..to..directory1/../",IN_ALL_EVENTS);
wd2 = inotify_add_watch(event_notifier,"/../path..to..directory2/../",IN_ALL_EVENTS);
wd3 = inotify_add_watch(event_notifier,"/../path..to..directory3/../",IN_ALL_EVENTS);
. . . .
wdn = inotify_add_watch(event_notifier,"/../path..to..directoryn/../",IN_ALL_EVENTS);
现在,我可以在多个目录上添加监视。这些调用中的每一个都返回一个“监视描述符”(上面的 wd1、wd2、wd3.. wdn)。每当任何目录中发生事件时,inotify 系统都会向 inotify 文件描述符 event_notifier 发送一个事件以及对应于该特定“监视目录”的监视描述符(wd1、wd2...wdn)
当事件发生时,我可以读取 event_notifier 中的 struct inotify_event 数组。这个 inotify_event 结构有以下字段:
struct inotify_event
{
int wd; //Watch descriptor
...
uint32_t len; //Size of 'name' field
char name[]; //null terminated name
}
要读取事件,你只需要做
read(event_notifier, buffer, sizeof(buffer))
struct inotify_event* event;
event=(struct inotify_event*)buffer; //Assuming only one event will occur
我想知道通知来自哪个目录。但是当我 stat() watch 描述符时,它什么也没给我
struct stat fileinfo;
fstat(event->wd, &fileinfo);
printf("\n Size of file is %l",fileinfo_st.size);
甚至/proc/self/fd/event->fd 上的 readlink() 也没有产生任何文件名。
char filename[25];
readlink("/proc/self/fd/event-wd",filename,sizeof(filename));
printf("\n The filename is %s",filename);
我有两个问题:
1) watch 描述符究竟指向什么? 它有什么好处?
2) 我如何知道通知来自哪个目录?
最佳答案
What is the watch descriptor pointing to exactly ? What is it good for ?
监视描述符不是文件系统对象或文件描述符。它是 inotify 子系统用来将事件链接到 watched 资源的资源描述符,并使您可以在删除它们时指定某些 watches。
您还应该注意,可能的“打开”监视描述符的数量在系统上是有限的。您可以使用以下方法获得最大值:
cat /proc/sys/fs/inotify/max_user_watches
如果您出于任何原因需要超过此值,您可以使用以下方式设置值:
sudo sysctl -w fs.inotify.max_user_watches=XXXXXX
How can I tell which directory the notification is coming from ?
仅使用 inotify 扩展无法从事件结构中获取文件(目录)的完整路径。您的应用程序代码将需要特殊的查找表来存储监视描述符和完整路径名之间的链接。我在 PHP 中做过一次,因为我也觉得我需要它。您可以查看 Github 上的代码.就像我说的,它是 PHP,但它可能有助于理解我在做什么。 (inotify 系统调用签名在 PHP 和 C 中是相同的)
关于c - watch 描述符到底是什么? (Linux inotify 子系统),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24342156/
你怎么能管理这样的事情?我尽我最大的努力将子系统设计为可重用,但只有某些特定于站点的东西必须自定义(例如 Account 实体中的字段,或 orm 注释中的 cfc="")。 我曾想过使用 SVN 并
我正在编写 native 模式应用程序(想想: link /subsystem:native )。这意味着我不能使用 kernel32.dll 中的任何内容,这(显然)在 C 运行时库中没有任何意义。
我注意到使用 emscripten,即使是相对较小的 C++ 文件也可以快速转换为相当大的 JavaScript 文件。示例: #include int main(int argc, char**
在恢复模式下运行标准 Windows 7 安装盘时,如果您打开命令行并运行自定义构建的应用程序,您将收到错误“不支持子系统”。我试过与/SUBSYSTEM:CONSOLE、WINDOWS 和 NATI
我有一个生成一些报告并在 GUI 中显示相同内容的 MFC 应用程序。当使用某些命令行参数传递时,我需要将它作为控制台应用程序运行。在控制台模式下,它将在标准输出/错误中生成报告/错误,我应该能够将其
本文讲解 pinctrl 子系统和 gpio 子系统的 API,以及使用示例。 传统的配置 pin 的方式就是直接操作相应的寄存器,但是这种配置方式比较繁琐、而且容易出问题(比如 pin 功能
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 8 年前。
Windows Vista Enterprise 和 Ultimate 的要点功能之一是 Windows 的 Unix 子系统,它允许您编写 posix... 东西?不管怎样,我不喜欢谈论它……有人使
我在 Windows 10 上的 WSL 中使用 Ubuntu,并且我在 WSL 中安装了 git 并定期使用它。我有一个非常烦人的问题,我尝试缓存我的 github 凭据,因此我不必在提交时不断输入
我正在使用旧的 bcc32 (borland 5.5)(我知道这很旧编译器但不要告诉我我不应该使用它) 我可以使用控制台或 Windows 子系统进行编译。 我不想用 windows 子系统编译,我想
设置: 榛子:3.12.3 Spring 启动:2.1.6 Java:1.8 参数:-XX:+UseG1GC Xms7g -Xmx7g 这些正在 Docker 中运行:openjdk:8 它们在专用
我曾经在 Windows 10 的 Linux 子系统上通过 bash 控制台通过 ssh 连接到我的服务器。 我重新安装了 Windows,并将 id_rsa、id_rsa.pub 和 known_
我目前在我的 C 代码中使用 inotify() 系统来监视文件系统中某些目录的事件。 现在,使用这些东西之一的过程如下。你取一个整数(比如 event_notifier),使用 inotify_in
安装 WSL 1. 开启WSL 必须启用“适用于 Linux 的 Windows 子系统”可选功能并重启,然后才能在 Windows 上运行 Linux 发行版。 以管理员运行Powershell(开
我正在学习如何使用 https://intermezzos.github.io 构建基本的操作系统内核 我已经创建了我的 .iso文件,我正在运行 qemu-system-x86_64 -cdrom
不久前我使用 crontab -e 设置了一些 cronjobs .我的 crontab 包括以下行: * * * * * /usr/bin/touch /home/blah/MADEBYCRON 我
我已经安装了 visual studio 2008 Professional Edition,但我无法在其中一个 visual C++ 项目中设置/SUBSYSTEM:POSIX 选项。我还从 SUA
基本上,我需要一个程序来将 Windows .exe 从控制台对应项中排序。 文件扫描器: SortExe(file exe) { if (IsPeWindows(exe)) {
我有一个 python 脚本,我想在计算机的剪贴板中放置一个字符串。我在 Linux、Mac 和以前使用 cygwin 在 Windows 中工作。我不得不修改一行代码以使其在各自的系统中工作。我无法
最近发布了 Windows 10 周年更新的新更新,包括 Linux 子系统 based on Ubuntu 14.04而现在我希望我所有的工作环境都在这个 Linux 子系统中。 我尝试按照官方网站
我是一名优秀的程序员,十分优秀!