关于Solaris中类似于的Inotify功能

简介: 当年的巨无霸一去不复返了啊。在SUN收购Mysql之后,我们还在讨论SUN已经是一个全产业链的超级大公司了。那时的SUN有语言JAVA,有操作系统Solaris,有数据库Mysql,有IDE,有硬件。

可以使用http://blogs.sun.com/praks/entry/file_events_notification中介绍的port方法,在用户态监视系统中某个文件(大家都知道*nix中的文件,并不一定真的是文件,可以是目录等等一些东西)。该机制可以监控的事件有:

     Watchable events:

FILE_ACCESS             /* Monitored file/directory was accessed */
FILE_MODIFIED        /* Monitored file/directory was modified */
FILE_ATTRIB             /* Monitored file/directory's ATTRIB was changed */
FILE_NOFOLLOW    /* flag to indicate not to follow symbolic links */

     Exception events - cannot be filtered:

FILE_DELETE                 /* Monitored file/directory was deleted */
FILE_RENAME_TO        /* Monitored file/directory was renamed */
FILE_RENAME_FROM /* Monitored file/directory was renamed */
UNMOUNTED                /* Monitored file system got unmounted */
MOUNTEDOVER          /* Monitored file/directory was mounted on */

这些事件类型定义在sys/port.h中,在原文中可以看到这个机制不止可以监视文件事件。在使用文件事件通知(File Events Notification)时,像socket变成一样现需要一个socket。在FEN中需要的port,可以用port_create函数创建port。创建port后可以使用函数port_associate来注册该port上要监视的事件源的类型,再将你的文件的现在的状态填到结构体file_obj_t中传给该函数。含有就是你要系统通知你的事件(不过我在测试的时候,只设置FILE_ACCESS|FILE_MODIFIED|FILE_ATTRIB其他事件一样会通知你)。用户数据会在调用port_get的返回参数port_event_t中的portev_object中填写。

所有工作完成了,可以直接调用函数port_get等待事件发生了。

哎!自从Oracle接手SUN之后,文档系统就可以说根本找不到SUN的信息了。够狠。

另附:函数声明

#include <port.h> 
int port_create(void); /* 该函数用创建port */
/* 下面两个函数一个注册一个注册文件事件通知 */
int port_associate(int port, int source, uintptr_t object, int events, void *user);
int port_dissociate(int port, int source, uintptr_t object);
/* 在注册文件事件通知之后,需要调用该函数来得到事件,这两个函数会阻塞 */
int port_get(int port, port_event_t *pe, const timespec_t *timeout);
int port_getn(int port, port_event_t list[], uint_t max, uint_t *nget, const timespec_t *timeout);
目录
相关文章
|
监控 Linux C++
Linux 用inotify监听文件和目录
日常应用中,常常会遇到以下场景,监控文件夹A,若文件夹中的B文件发生变化,则执行C命令。Linux下可以通过inotify完成该功能。 自从Linux kernel 2.6.13起,inotify以作为内核的一部份,同时需要glibc 2.4以上版本。
2695 0
|
监控 Linux API
linux实时文件事件监听--inotify
一、inotify简介 inotify是Linux内核2.6.13 (June 18, 2005)版本新增的一个子系统(API),它提供了一种监控文件系统(基于inode的)事件的机制,可以监控文件系统的变化如文件修改、新增、删除等,并可以将相应的事件通知给应用程序。
3109 0
|
监控 Linux Shell
|
监控 Linux 数据安全/隐私保护
|
Unix Windows 网络安全