当前位置: 技术问答>linux和unix
inotify 检测文件被修改
来源: 互联网 发布时间:2016-08-07
本文导语: #include #include #include #include static void _inotify_event_handler(struct inotify_event *event) { printf("event->mask: 0x%08xn", event->mask); printf("event->name: %sn", event->name); } int main(int argc, char **argv) { unsigned char buf[1024] = {0}; ...
#include
#include
#include
#include
static void _inotify_event_handler(struct inotify_event *event)
{
printf("event->mask: 0x%08xn", event->mask);
printf("event->name: %sn", event->name);
}
int main(int argc, char **argv)
{
unsigned char buf[1024] = {0};
struct inotify_event *event = {0};
int fd = inotify_init();
//IN_ALL_EVENTS
int wd = inotify_add_watch(fd, "aa.txt",IN_MODIFY);
for (;;)
{
fd_set fds;
FD_ZERO(&fds);
FD_SET(fd, &fds);
while (select(fd + 1, &fds, NULL, NULL, NULL) > 0)
{
int len, index = 0;
while (((len = read(fd, &buf, sizeof(buf))) > aa.txt 这样修改aa.txt的
你是不是使用vi在改变aa.txt文件?
下面找到了比较正确完整的解释
用vim编辑那个被监视的文件,修改并保存,触发的是IN_DELETE_SELF和 IN_MOVE_SELF事件而不是我们所期望的IN_MODIFY事件;再次修改并保存的时候不再有任何事件发生。希望能给看官一个教训,其实这是由于 vim的工作机制引起的,vim会先将源文件复制为另一个文件,然后在另一文件基础上编辑(一般后缀名为swp),保存的时候再将这个文件覆盖源文件,因此会出现上述的第一个现象,第二个现象是因为原来的文件已经被后来的新文件代替,因此监视对象所监视的文件已经不存在了,所以自然不会产生任何事件
#include
#include
#include
static void _inotify_event_handler(struct inotify_event *event)
{
printf("event->mask: 0x%08xn", event->mask);
printf("event->name: %sn", event->name);
}
int main(int argc, char **argv)
{
unsigned char buf[1024] = {0};
struct inotify_event *event = {0};
int fd = inotify_init();
//IN_ALL_EVENTS
int wd = inotify_add_watch(fd, "aa.txt",IN_MODIFY);
for (;;)
{
fd_set fds;
FD_ZERO(&fds);
FD_SET(fd, &fds);
while (select(fd + 1, &fds, NULL, NULL, NULL) > 0)
{
int len, index = 0;
while (((len = read(fd, &buf, sizeof(buf))) > aa.txt 这样修改aa.txt的
你是不是使用vi在改变aa.txt文件?
下面找到了比较正确完整的解释
用vim编辑那个被监视的文件,修改并保存,触发的是IN_DELETE_SELF和 IN_MOVE_SELF事件而不是我们所期望的IN_MODIFY事件;再次修改并保存的时候不再有任何事件发生。希望能给看官一个教训,其实这是由于 vim的工作机制引起的,vim会先将源文件复制为另一个文件,然后在另一文件基础上编辑(一般后缀名为swp),保存的时候再将这个文件覆盖源文件,因此会出现上述的第一个现象,第二个现象是因为原来的文件已经被后来的新文件代替,因此监视对象所监视的文件已经不存在了,所以自然不会产生任何事件
|
我用你的程序执行能检测到啊
[lihua@wuqingmin test]$ ./inotfy
event->mask: 0x00000002
event->name:
event->mask: 0x00000002
event->name:
说说你的执行过程
[lihua@wuqingmin test]$ ./inotfy
event->mask: 0x00000002
event->name:
event->mask: 0x00000002
event->name:
说说你的执行过程
|
快要沉了,帮你顶下
希望有会的人来帮你解答下
希望有会的人来帮你解答下
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。