【发布时间】:2016-02-04 17:44:48
【问题描述】:
我知道如何在 C 中进行基本的文件操作,但如果可能的话,我想做的是以某种方式创建一个表示实时运行文件的变量(例如,来自 apache 的每秒更新的 access_log) .然后我希望能够读取输入到文件中的最后一行,无论是否有任何其他进程当前打开了文件。
我正在考虑这样的代码:
int main(){
FILE *live=fattachto("/path/to/apaches/access_log");
long lastupdated=live->lastwrite();
while(1){
if(live->lastwrite() != lastupdated){printf("File was just updated now\n");}
sleep(1);
}
}
是的,我确实在我的代码中进入了睡眠状态,因为我想确保我的代码不会使 CPU 过热。
上面的代码不会执行,因为我正在寻找正确的函数集来生成最终结果。
有什么想法吗?
【问题讨论】:
-
请不要写这样的代码。代码就是艺术,它不应该只是编译和工作,这段代码对我来说太丑了,我永远不会回到这个问题。
-
我认为您正在寻找
stat系统调用。 -
“实时”一词是最被误用和/或被误解最多的术语之一。请提供您使用的定义。在正确的硬件和正确的操作系统上,应用程序将无法“过热” CPU。
-
也许看看inotify
-
听起来你正在尝试写
tail -f。为什么不使用它或找到它的源代码作为起点,即opensource.apple.com/source/text_cmds/text_cmds-8.3/tail/tail.c