从 Linux 2.6.13 内核开始,Linux 就推出了 inotify,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。
参考文章:
http://blog.jiunile.com/php%E4%BD%BF%E7%94%A8inotify%E5%AE%9E%E7%8E%B0%E9%98%9F%E5%88%97%E5%A4%84%E7%90%86.html
http://os.51cto.com/art/201011/232694_all.htm
http://blog.youkuaiyun.com/myarrow/article/details/7096460
简介:
PHP的inotify扩展,暴露了inotify函数,inotify_init()、inotify_add_watch()、inotify_rm_watch()
正如C语言的inotify_init()函数,返回一个文件描述符,PHP的inotify_init()返回一个stream流资源,使用标准的流函数,像:stream_select()、stream_set_blocking()和fclose()。PHP的inotify_read()函数替代了C语言读取inotify事件的方式。
安装:
未与PHP绑定,可通过:http://pecl.php.net/package/inotify 来下载编译安装
函数:
inotify_init() - 初始化一个inotify实例,用于 'inotify_add_watch()'
inotify_add_watch() - 给inotify添加一个监控文件或目录,返回监控的唯一id
inotify_rm_watch() - 移除inotify的一个监控
inotify_read() - 从inotify中,读取inotify事件
inotify_queue_len() - 如果有等待的事件,返回一个>0的数字。通过该函数,我们可以知道 'inotify_read()' 是否阻塞。如果返回一个>0的数字,有等待事件,inotify_read()将不会阻塞
手册上示例:
<?php
// Open an inotify instance - 实例化
$fd = inotify_init();
// Watch __FILE__ for metadata changes (e.g. mtime) - 监听 '__FILE__' 元数据的变化
$watch_descriptor = inotify_add_watch($fd, __FILE__, IN_ATTRIB);
// generate an event - 生成一个事件
touch(__FILE__);
// Read events - 读取事件
$events = inotify_read($fd);
print_r($events);
// The following methods allows to use inotify functions without blocking on inotify_read(): - 下面的方法允许使用inotify函数,而不会在 'inotify_read()' 阻塞
// - Using stream_select() on $fd: - 在实例化的inotify上,使用 'stream_select()'
$read = array($fd);
$write = null;
$except = null;
stream_select($read,$write,$except,0);
// - Using stream_set_blocking() on $fd - 在实例化的inotify上,使用 'stream_set_blocking()',设置非阻塞
stream_set_blocking($fd, 0);
inotify_read($fd); // Does no block, and return false if no events are pending
// - Using inotify_queue_len() to check if event queue is not empty - 检查事件队列是否为空
$queue_len = inotify_queue_len($fd); // If > 0, inotify_read() will not block - >0,inotify_read() 将不会阻塞
// Stop watching __FILE__ for metadata changes - 停止监听 '__FILE__' 元数据的改变
inotify_rm_watch($fd, $watch_descriptor);
// Close the inotify instance - 关闭 inotify 实例
// This may have closed all watches if this was not already done
fclose($fd);
?>
某人给的例子:
<?php
/**
* Tail a file (UNIX only!)
* Watch a file for changes using inotify and return the changed data
*
* @param string $file - filename of the file to be watched
* @param integer $pos - actual position in the file
* @return string
*/
function tail($file,&$pos) {
// get the size of the file
if(!$pos) $pos = filesize($file);
// Open an inotify instance
$fd = inotify_init();
// Watch $file for changes.
$watch_descriptor = inotify_add_watch($fd, $file, IN_ALL_EVENTS);
// Loop forever (breaks are below)
while (true) {
// Read events (inotify_read is blocking!)
$events = inotify_read($fd);
// Loop though the events which occured
foreach ($events as $event=>$evdetails) {
// React on the event type
switch (true) {
// File was modified
case ($evdetails['mask'] & IN_MODIFY):
// Stop watching $file for changes
inotify_rm_watch($fd, $watch_descriptor);
// Close the inotify instance
fclose($fd);
// open the file
$fp = fopen($file,'r');
if (!$fp) return false;
// seek to the last EOF position
fseek($fp,$pos);
// read until EOF
while (!feof($fp)) {
$buf .= fread($fp,8192);
}
// save the new EOF to $pos
$pos = ftell($fp); // (remember: $pos is called by reference)
// close the file pointer
fclose($fp);
// return the new data and leave the function
return $buf;
// be a nice guy and program good code ;-)
break;
// File was moved or deleted
case ($evdetails['mask'] & IN_MOVE):
case ($evdetails['mask'] & IN_MOVE_SELF):
case ($evdetails['mask'] & IN_DELETE):
case ($evdetails['mask'] & IN_DELETE_SELF):
// Stop watching $file for changes
inotify_rm_watch($fd, $watch_descriptor);
// Close the inotify instance
fclose($fd);
// Return a failure
return false;
break;
}
}
}
}
// Use it like that:
$lastpos = 0;
while (true) {
echo tail($file,$lastpos);
}
?>相关推荐
保姆级教程:用北醒TFmini-i-CAN雷达给PixHawk飞控加装‘眼睛’,实现自动避障与定高
经过多次测试,前向雷达的最佳安装位置是机架前部下方5-10cm处,倾斜角度20-30度。电源方面,建议为CAN设备单独供电,避免电机启动时的电压骤降导致数据异常。北醒TFmini-i-CAN雷达与PixHawk飞控的组合,为DIY爱好者打开了低成本实现智能避障的大门。实际部署时,需确保整个CAN网络的波特率一致(TFmini-i默认为250kbps),每个设备具有唯一ID。雷达的安装角度也直接影响检测效果,建议通过3D打印支架将雷达向前下方倾斜15-30度。当使用多个雷达时,需为每个设备创建独立的参数组。
inotify监听文件和目录
监控文件夹A,若文件夹中的B文件发生变化,则执行C命令。Linux下可以通过inotify完成该功能。 1,相关函数 inotify_init() - 创建一个inotify实例 inotify_add_watch(int fd, const char *pathname, uint32_t mask) - 加入文件或目录到inotify进行监测 inotify_rm_watch(int fd, int wd) - 移除一个watcher 2,相关结构 struct inotify_event {
IBM 3560M3 R5 坏盘更换记录
公司一台老旧 3650M3在日常巡查过程中发现硬盘报错
关于使用inotify监测文件目录发现的问题
使用inotify监测文件系统时需要注意的的事项
IO多路转接 ——— select、poll、epoll
select是系统提供的一个多路转接接口。select函数的函数原型如下: 参数说明:参数timeout的取值:返回值说明:select调用失败时,错误码可能被设置为:fd_set结构与sigset_t结构类似,fd_set本质也是一个位图,用位图中对应的位来表示要监视的文件描述符。 调用select函数之前就需要用fd_set结构定义出对应的文件描述符集,然后将需要监视的文件描述符添加到文件描述符集当中,这个添加的过程本质就是在进行位操作,但是这个位操作不需要用户自己进行,系统提供了一组专门的接口,用
互联网金融项目实战(大数据Hadoop hive)
什么是互联网金融? 互联网金融 --> 信贷(信用贷款) --> 支付宝率先搞了一个信用体系 互联网金融: 在线支付、P2P 银行: 只会锦上添画、不喜欢雪中送炭 银行害怕出现坏账 ( 储户存钱,银行放贷 赚个利息差 ) 银行是可以倒闭的 保险公司不允许倒闭 银行分为:商业银行(自生自灭的)和非商业银行(国家的) 中国工商银行 全球第一大行 招商银行(清朝的一个李鸿章) 中国银行(历史超过 100 年了) 国家政策:希望银行能够扶持中小型企业 p2p:网络借贷平台 民间吸纳贷款 -->
Linux源码剖析——inotify源码分析
本文通过分析inotify的源码来了解其实现过程,从分析过程可以看出,inotify的原理还是比较简单的:就是当用户调用读写、创建或删除文件的系统调用时,内核会注入相应的事件触发函数来产生一个事件,并且添加到inotify的事件队列中,然后用户就可以通过调用read函数来读取inotify事件队列中的事件。
QWEN 2.5模型结构解析与代码解读
对Qwen2.5大模型的代码进行研究
inotify使用帮助
inotify是用来监视文件系统事件的机制,在linux 2.6.13内核中引入。该机制可以用来监视文件和目录,当文件或目录发生变化时,内核会将文件或目录的变化发送给inotify文件描述符,在应用层只需调用read()就可以读取这些事件,非常的方便。更好的是,inotify文件描述符还可以使用select、poll、epoll这些接口来监听,当有事件发生是,inotify文件描述符会可读。 一
AI智能体丨使用Coze一键生成中式养生视频,39 条作品涨粉 37.9 万!(附保姆级教程)
本文介绍如何利用扣子(Coze)AI智能体工作流高效制作中式养生短视频。该方案通过AI自动生成养生文案、古风插画素材、语音合成和视频剪辑,将传统制作流程从2-3小时缩短至1-2分钟。工作流包含文案创作、音频生成、图片素材制作和视频合成四大模块,采用大模型处理各环节内容,最终输出可直接导入剪映的草稿文件。特别适合希望快速批量制作文化氛围感强、兼具干货与视觉效果的养生内容创作者,效率提升近百倍。
系统分析师论文范文(三)微服务
摘要(300字) 2024年4月,我作为系统分析师参与某省三甲医院云影像系统建设项目,负责系统分析与设计工作。该项目旨在响应国家"无胶片化"医疗政策,解决传统影像系统数据孤岛、调阅效率低等问题。系统基于DICOM 3.0和HL7国际标准,采用B/S架构与Spring Cloud Alibaba微服务技术栈,包含影像采集、智能分析、数据安全等核心模块,实现全院影像资源的云端统一管理与多端调阅。在架构设计上,通过微服务拆分、分布式事务控制及多层次安全防护机制,保障了系统的高可用性与数据一致性。系统于2024年1
文件系统监控——inotify
从 Linux 2.6.13 内核开始,Linux 引入了 inotify,可以通过该机制监控文件或目录的一组指定事件,例如打开、关闭、移动/重命名、删除 、创建或更改属性。创建一个inotify实例并返回一个对应的文件描述符操作inotify实例相关联的“watch list”(创建或者修改已有的)当受监视的文件和目录发生事件时,可以使用 read从 inotify 文件描述符中读取这些事件信息从inotify监控列表中删除项目。
静态时序分析(STA)—— 标准单元库
目录 1、时序库 概览 2、时序模型 1、基本概念 2、影响因素 3、线性延时模型 4、非线性延时模型 5、单元时序弧 1、组合逻辑单元 2、时序逻辑单元 6、线负载模型 参考说明 上一篇,学习了 STA相关的基本概念,本篇继续学习 STA相关的 标准单元库。 1、时序库 概览 库文件概览: 2、时序模型 1、基本概念 2、影响因素 对于组合逻辑的时序弧而言,其延时的大小取决于: 1、输出负载,即,输出端的电容负载的大小。容性负载越大,...
php使用inotify扩展监控文件或目录,如果发生改变,就执行指定命令
通过inotify扩展监控文件或目录的变化,如果发生变化,就执行命令。 可以应用于 swoole 中,如果文件发生变化,就执行 kill -USR1 进程PID 来实现热更新。 <?php class Monitor { public $dir = ''; public $cmd = ''; public $timeout = 1; p...
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
计算机控制技术及应用
《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。
Linux C 使用 inotify 监控文件或目录变化
1 运行环境 操作系统:Ubuntu 18 2 inotify 简介 inotify 是一个 Linux 内核特性(监视文件系统事件),它用于监控文件系统,比如删除、读、写操作等,当发生对应事件时,则会触发 inotify。当监控目录时,与该目录自身以及该目录下面的文件都会被监控,其上有事件发生时都会通知给应用程序 inotify 监控机制为非递归,若想监控整个目录子树内的事件,则需...
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
php inotify扩展安装,php使用inotify扩展监控文件或目录,如果发生改变,就执行指定命令...
通过inotify扩展监控文件或目录的变化,如果发生变化,就执行命令。可以应用于 swoole 中,如果文件发生变化,就执行 kill -USR1 进程PID 来实现热更新。class Monitor{public $dir = '';public $cmd = '';public $timeout = 1;public function __construct(){if (!extension_...
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
linux c 监控目录看谁打开过,Linux C 使用 inotify 监控文件或目录变化
1 运行环境操作系统:Ubuntu 182 inotify 简介inotify 是一个 Linux 内核特性(监视文件系统事件),它用于监控文件系统,比如删除、读、写操作等,当发生对应事件时,则会触发 inotify。当监控目录时,与该目录自身以及该目录下面的文件都会被监控,其上有事件发生时都会通知给应用程序inotify 监控机制为非递归,若想监控整个目录子树内的事件,则需对该树中的每个目录发起...
php使用inotify扩展监控文件或目录的变化
一、安装inotify扩展 1、下载inotify扩展源码 https://pecl.php.net/package/inotify 对于php7以上版本,请下载 inotify-2.0.0.tgz。 2、编译安装 tar xf inotify-2.0.0.tgz cd inotify-2.0.0 /data/nmp/php/bin/phpize ./configu...
php 添加inotify扩展,php使用inotify扩展监控文件或目录,如果发生改变,就执行指定命令...
class Monitor{public $dir = ‘‘;public $cmd = ‘‘;public $timeout = 1;public function __construct(){if (!extension_loaded(‘inotify‘)) {echo ‘请安装inotify扩展‘, PHP_EOL;exit;}//解析命令行参数,有一个:号表示必填项$opts = geto...
如何监控Linux文件系统(inotify功能介绍)
inotify机制是Linux内核2.6.13以后支持的一个新的特性,功能是监视文件系统的变化。当监视到文件系统发生任何变化以后,相应的应用程序可以得到通知。inotify可以监视单个文件或甚至是某个目录的变化。 要启用inotify机制对文件或目录进行监控,一般需要顺序调用以下几个API: 1)inotify_init 最开始要创建一个inotify实例,这是通过调用inotify_ini
实现对文件的实时监控--使用Inotify方法
linux系统下监控文件更改–Inotify API使用方法1.简介: 1.inotify机制可用于监控文件或目录。当监控目录时,与该目录自身以及该目录下面的文件都会被监控,其上有事件发生时都会通知给应用程序 2.otify监控机制为非递归,若应用程序有意监控整个目录子树内的事件,则需对该树中的每个目录发起inotify_add_watch()调用 可使用select(),poll(),epoll()
Linux 下监控某个文件、目录读写次数
目的 在 Linux 下监控某个文件或者某个目录下所有文件的读写 软件下载 inotify-tools 下载 编译方法 如果缺少编译包,自行利用 yum 安装编译软件, 如 gcc, make 等 rpm 参考下面编译安装步骤 tar xf inotify-tools-3.13.tar.gz cd inotify-tools-3.13/ ./configure make make ins...
inotify的安装与使用
下载 链接:https://pan.baidu.com/s/1jt6TqwWv5e9qsDK5Roi4mw 密码:vdab配置 描述 inotify机制可用于监控文件或目录。当监控目录时,与该目录自身以及该目录下面的文件都会被监控,其上有事件发生时都会通知给应用程序。 inotify监控机制为非递...
linux下通过inotify-tools监控文件系统,linux下通过inotify-tools监控文件系统
在Linux下面,有一个软件可以帮我们监控文件系统的改动,就是inotify。这个软件需要内核的支持,内核版本在2.6.13以上的系统可以用 。如需确定内核是否支持,可执行:[root@slave bin]# ls -l /proc/sys/fs/inotify-rw-r--r-- 1 root root 0 10-13 11:30 max_queued_events-rw-r--r-- 1 r...
337



被折叠的 条评论
为什么被折叠?



