在C++中实现"tail -f"

Ham*_*ing 15 c++ tail

我想在C++中创建一个与"tail-f"功能相同的小代码:在文本文件中查看新行并在标准输出中显示它们.

想法是有一个监视文件的线程

有没有一种简单的方法可以在不打开和关闭文件的情况下每次都这样做?

小智 13

继续阅读文件.如果读取失败,则不执行任何操作.没有必要反复打开和关闭它.但是,如果您的操作系统提供文件,您会发现使用特定于操作系统的功能来监视文件会更有效.

  • +1:尝试在目前为止读取到文件的末尾(对于合理长度的文件),在实践中每秒一次非常便宜.你只需要阅读直到你结束,然后再睡一会儿再试一次.(如果你在Windows上,请注意使用正确的共享标志打开,这样就不会锁定其他编写器.这可能意味着使用本机IO调用而不是C++标准调用...) (3认同)

ste*_*anB 13

看一下Linux 上的inotify或Mac OS上的kqueue.

Inotify是Linux内核子系统,允许您订阅文件上的事件,当文件发生时,它会报告给您的应用程序.