linux - 系统如何监听文件变化?

标签 linux node.js operating-system filesystems

操作系统层面,它如何实现知道某些东西发生了变化(比如文件变化)

例如:
在 node 中,我们可以监控文件并在文件发生变化时执行一些操作

fs.watch(file_path,function(){
  //do something while the file's changed;
});

谁能给我一个简短的直觉/想法/关键字来说明它是如何工作的

我能想出的一个是,当我在 vim 中点击 :w 时,它以某种方式调用了一些系统 *fake_save_file* 函数,并且在这个 *fake_save_file* 函数中,它将一些事件分派(dispatch)到其他地方

最佳答案

您可能知道内核将文件系统中的文件索引为文件描述符。文件监视是通过监听这些文件描述符的更改来实现的。在 Linux 中 inotify这样做。

每当您打开、读取、写入/修改或移动文件时,内核都会对文件描述符发出操作。 Inotify 通过跟踪这些操作并向您显示它们来扩展文件系统。

您举的例子有些不正确。 fake_save_file 由您的文本编辑器 vim 创建,用于存储所做的临时更改,除非您用户实际保存它。当您使用 :w 保存它时,编辑器会将您的 actual_save_file 替换为 fake_save_file 的副本。

作为用户,您将看到您的 actual_save_file。当您在 vim 中输入 :w 时,这会发生变化。当 vim 修改其内容时,您会收到通知。

关于linux - 系统如何监听文件变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21622099/

相关文章:

php - 工单消息在行空间中\r\n

Linux CLI - 光栅到矢量(追踪)

node.js - 测试 WebSocket 时如何阻止 Jest 挂起?

operating-system - 直接连接到 CPU 的 PCIe 插槽的中断路由

operating-system - 在xv6中,switchuvm/switchkvm中的uvm和kvm代表什么?

python深拷贝和浅拷贝并传递引用

PHP:pcntl_alarm() 和 socket_select() 可以和平存在于同一个线程中吗?

javascript - Sequelize update with association 不更新关联模型的表

javascript - 在 Facebook 帖子中发布包含多张图片的状态

multithreading - 生产者消费者仅使用 1 个额外信号量