免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3237 | 回复: 8
打印 上一主题 下一主题

[C] 请问C语言如何在一个文件变动时获得中断信号? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-19 23:37 |只看该作者 |倒序浏览
我想实现监控一个文本文件, 如果文件增长, 则该程序能自动感知, 并读取增长的数据。就是类似linux 命令 tail -f 或 less +F 的功能

我现在用查询方式工作,就是隔一段时间看一下文件长度是否变化,然后读取文件,但这样效率不高。

而tail 或 less 程序应该是以中断方式工作的,各位大虾,谁能告诉我是如何实现的?

谢谢了先。

论坛徽章:
0
2 [报告]
发表于 2007-09-19 23:42 |只看该作者
原帖由 linux1240 于 2007-9-19 23:37 发表
我想实现监控一个文本文件, 如果文件增长, 则该程序能自动感知, 并读取增长的数据。就是类似linux 命令 tail -f 或 less +F 的功能

我现在用查询方式工作,就是隔一段时间看一下文件长度是否变化,然后读取文 ...

用select如何

论坛徽章:
0
3 [报告]
发表于 2007-09-20 08:55 |只看该作者
man 2 fcntl
看“File and directory change notification”部分

论坛徽章:
0
4 [报告]
发表于 2007-09-20 09:01 |只看该作者
google

inotify example
inotify_init



int inotify(const char *path)
{
        int fd;
        int wd;
        fd = inotify_init ();
        if (fd < 0)
                return -1;
        wd = inotify_add_watch (fd,path,IN_CREATE|IN_MODIFY|IN_DELETE);
        if (wd < 0) {
                close(fd);
                return -1;
        }
        return fd;
}

论坛徽章:
0
5 [报告]
发表于 2007-09-20 09:08 |只看该作者
原帖由 flw2 于 2007-9-20 09:01 发表
google

inotify example
inotify_init



int inotify(const char *path)
{
        int fd;
        int wd;
        fd = inotify_init ();
        if (fd < 0)
                return -1;
...

怎么man不到inotify_add_watch这个函数啊?
还有这个函数是堵塞的吧

论坛徽章:
0
6 [报告]
发表于 2007-09-20 09:23 |只看该作者
原帖由 jaffaz 于 2007-9-20 08:55 发表
man 2 fcntl
看“File and directory change notification”部分

这个是正解。

论坛徽章:
0
7 [报告]
发表于 2007-09-20 10:23 |只看该作者
原帖由 jaffaz 于 2007-9-20 09:08 发表

怎么man不到inotify_add_watch这个函数啊?
还有这个函数是堵塞的吧


不是阻塞的
fcntl也可以,不过不是同步的,是使用信号驱动的,我没有使用过。
用inotify之后就可以用select了,特别你要用到select的时候。

论坛徽章:
0
8 [报告]
发表于 2007-09-20 11:08 |只看该作者
好,非常感谢各位。

论坛徽章:
0
9 [报告]
发表于 2010-03-06 09:58 |只看该作者
楼上几位说的方法都是平台相关的,其实不用判断文件大小,隔一段时间读一下就行了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP