【问题标题】:read line of file in realtime in C在C中实时读取文件行
【发布时间】: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

标签: c file real-time


【解决方案1】:

为什么不直接设置行缓冲或使用小的缓冲区读取大小,一旦你搜索到日志文件的末尾?然后在添加文件时简单地阻止读取文件中的行?

然后,当读取返回时,您可以在任何感兴趣的输入上发出信号、设置标志或启动处理。

【讨论】:

    猜你喜欢
    • 2019-06-18
    • 1970-01-01
    • 2010-12-24
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多