高分求助--关于如何捕捉文件的改变

smokefire 2004-09-06 04:51:00
我要检查一个文件是否改变,当文件改变得时候就通知我一下.但是我不想使用轮询得方法 因为太耗CPU了,有什么别的办法可以建立像socket那样得东东 一有连接请求就建立链接?就是说文件一改变就通知我.同样得问题,比如文件夹增加一个文件.
另外,这些东东有普遍得方法解决么?我们经常问:你好了么?而"你"又不在我们程序控制得范围.
...全文
197 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
email2me 2004-10-28
  • 打赏
  • 举报
回复
我贴一段源码,应该有所帮助:
#define _GNU_SOURCE /* needed to get the defines */
60 #include <fcntl.h> /* in glibc 2.2 this has the needed
61 values defined */
62 #include <signal.h>
63 #include <stdio.h>
64 #include <unistd.h>
65
66 static volatile int event_fd;
67
68 static void handler(int sig, siginfo_t *si, void *data)
69 {
70 event_fd = si->si_fd;
71 }
72
73 int main(void)
74 {
75 struct sigaction act;
76 int fd;
77
78 act.sa_sigaction = handler;
79 sigemptyset(&act.sa_mask);
80 act.sa_flags = SA_SIGINFO;
81 sigaction(SIGRTMIN, &act, NULL);
82
83 fd = open(".", O_RDONLY);
84 fcntl(fd, F_SETSIG, SIGRTMIN);
85 fcntl(fd, F_NOTIFY, DN_MODIFY|DN_CREATE|DN_MULTISHOT);
86 /* we will now be notified if any of the files
87 in "." is modified or new files are created */
88 while (1) {
89 pause();
90 printf("Got event on fd=%d\n", event_fd);
91 }
92 }
zengjin8310 2004-10-28
  • 打赏
  • 举报
回复
fstat
smokefire 2004-09-08
  • 打赏
  • 举报
回复
to 古颜:
我也觉得是可行的,不过我没有用过select :) 你能否帮我写一下?我正在看select :)
smokefire 2004-09-08
  • 打赏
  • 举报
回复
顶起来
smaxll 2004-09-07
  • 打赏
  • 举报
回复
没有这样的信号。
collide 2004-09-07
  • 打赏
  • 举报
回复
signal中有一中信号是当目录发生改变时,发出信号,不过也可能时用fcntl,具体的我忘了,看unix环境高级编程,文件系统那一章的fcntl函数以及信号那一章。
smaxll 2004-09-07
  • 打赏
  • 举报
回复
想了一个方法,对file descriptor进行select的read阻塞。
在初始的可读之后,文件位置指针应该指向文件的末尾,
然后其他的改动selcet应该就能够得到可读的状态。

还没试过,不知道有可不可行。一会儿有时间试试。
smokefire 2004-09-07
  • 打赏
  • 举报
回复
自己顶一下
smokefire 2004-09-07
  • 打赏
  • 举报
回复
fcntl好像不行吧?行的话给段代码好么?
信号应该是没有的:如果有的话 下面哪个是?
SIGHUP 1 Term Hangup detected on controlling terminal
or death of controlling process
SIGINT 2 Term Interrupt from keyboard
SIGQUIT 3 Core Quit from keyboard
SIGILL 4 Core Illegal Instruction
SIGABRT 6 Core Abort signal from abort(3)
SIGFPE 8 Core Floating point exception
SIGKILL 9 Term Kill signal
SIGSEGV 11 Core Invalid memory reference
SIGPIPE 13 Term Broken pipe: write to pipe with no readers
SIGALRM 14 Term Timer signal from alarm(2)
SIGTERM 15 Term Termination signal
SIGUSR1 30,10,16 Term User-defined signal 1
SIGUSR2 31,12,17 Term User-defined signal 2
SIGCHLD 20,17,18 Ign Child stopped or terminated
SIGTSTP 18,20,24 Stop Stop typed at tty
SIGTTIN 21,21,26 Stop tty input for background process
SIGTTOU 22,22,27 Stop tty output for background process
SIGBUS 10,7,10 Core Bus error (bad memory access)
SIGPOLL Term Pollable event (Sys V). Synonym of SIGIO
SIGPROF 27,27,29 Term Profiling timer expired
SIGSYS 12,-,12 Core Bad argument to routine (SVID)
SIGTRAP 5 Core Trace/breakpoint trap
SIGURG 16,23,21 Ign Urgent condition on socket (4.2 BSD)
SIGVTALRM 26,26,28 Term Virtual alarm clock (4.2 BSD)
SIGXCPU 24,24,30 Core CPU time limit exceeded (4.2 BSD)
SIGXFSZ 25,25,31 Core File size limit exceeded (4.2 BSD)
SIGIOT 6 Core IOT trap. A synonym for SIGABRT
SIGEMT 7,-,7 Term
SIGSTKFLT -,16,- Term Stack fault on coprocessor (unused)
SIGIO 23,29,22 Term I/O now possible (4.2 BSD)
SIGCLD -,-,18 Ign A synonym for SIGCHLD
SIGPWR 29,30,19 Term Power failure (System V)
SIGINFO 29,-,- A synonym for SIGPWR
SIGLOST -,-,- Term File lock lost
SIGWINCH 28,28,20 Ign Window resize signal (4.3 BSD, Sun)
SIGUNUSED -,31,- Term Unused signal (will be SIGSYS)
Wugifer 2004-09-06
  • 打赏
  • 举报
回复
用 fcntl 试试吧
bshawk 2004-09-06
  • 打赏
  • 举报
回复
我想不采用“轮询”好象不太可能?
除非从修改文件系统入手也许有可能?!
onlyf 2004-09-06
  • 打赏
  • 举报
回复
有没有办法知道会有什么程序改变这个文件?
由这个程序通知就行了。
Windows 10 免费升级已经接近尾声了, 在一周年更新即将到来之际, 特此编辑入门文档帮助广大用户熟悉操作 Windows 10, 从用户的视角阐述 Windows 10 功能和使用, 大部分操作附有截图以减少文字的枯燥描述, 解答想升级 Windows 10 的 Windows 7/8.1 用户的疑惑, 了解 Windows 10 的基本操作。 目前全球已有超过 3 亿设备升级到 Windows 10, Windows 10 的普及速度超过了相对发布时间的Windows 7, Windows 不断更新是为了你的网络安全,提供更加优质的体验,正如纳德拉所说, Windows10 将转变为一项服务,你可以在设备生命周期内享受服务并升级系统到最新状态。 升级过程轻松简单, 合 格的 Windows 7 或 Windows 8.1 设备可免费升级, 您的文件、照片、应用、设置等会被妥善保存。 微软一直在强调 Windows 10 将是最后一个操作系统,并且在未来保持更新, 而在中国仍有很大装机量的 Windows XP 已经在 2014 年停止支持,意味着这些落后的系统和即将被淘汰的设备将会面临巨大的风险。 新的电脑设备已经开始大量预装 Windows 10, 越来越多的人开始使用Windows 10 工作、学习、娱乐,掌握基本的操作系统知识十分的必要, 对于目前市场份额最高的 Windows 7,已经在 2013 年 10 月31 日停止零售, 2014 年 10 月 31 日停止预装(专业版除外)。 微软改变了曾经封闭式的 Windows 操作系统开发,转而听取用户的反馈,使用 Windows 10 的用户可以加入 Windows Insider 计划,和全球数百万的Insiders 一起帮助塑造 Windows 10,提供反馈并且为你赞同的反馈投票,成功的案例如邮件和日历中加入对中国传统节日和农历的支持,标题栏颜色。 很多用户升级电脑后出现了问题,部分是由于升级继承了旧版 Windows 的一些设置,当出现了一些问题时,只要掌握了基本技巧,就可以自行排除错误,或者在搜索引擎里查找相关问题的解决方案而不必求助于别人或者折腾地请技术人员修复,所谓“自己动手,丰衣足食” ,即使你的电脑已经完全无法启 动,你仍然可以全新安装 Windows 10。 当前 10586 更新已经非常稳定,适合任何可以升级的 Windows 7/8.1/10 设备,而尚未升级 Windows10 的设备,在 2016 年 7 月 29 日后微软将会移除升级提示,必需购买授权密钥才能激活。 微软和百度合作推广 Windows 10,中国区 Edge 浏览器默认搜索是百度,还和腾讯、 360 等公司合作帮助用户升级到 Windows 10,当然你也可以通过微软的推送或者升级工具/ISO 升级。 Windows 8 中保受诟病的应用终于不再是鸡肋,网易云音乐、某视频网站、淘宝等优秀的 UWP 应用已经上线,为用户提供优质的体验, Windows 10 也优化了高分屏的显示效果,系统图标支持 4K 分辨率。 Windows 10 上 DirectX 12 将会给游戏带来更佳的体验(需要显卡支持),量子破碎、极速竞技 6:巅峰等游戏大作已经上线 Windows 应用商店,可以下载体验。

23,223

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧