题
我正在写一个,看守在C我的世界服务器。基本上,它表服务器。日志,获取的最新行分析,如果它符合regex;执行一些行动。
该项目工程的现通常通过"回声串匹配regex>>服务器。日志",它分析并做什么,它应该。然而,当串写的文件自动通过我的世界服务器,它不工作,直到我关闭服务器或者(有时)登出。
我想,但我想知道,如果没有事情要做ext4冲数据的磁盘或东西沿着这些线;文件系统的问题。这将是奇如果情况果真如此,因为"尾f服务器。日志"的更新,每当的文件。
解决方案
解决了我自己的问题。事实证明,服务器写入日志文件的速度快于观察者从中读取的速度。所以观察者变得不同步了。
我通过在处理事件后添加一个检查来修复该问题,说“如果当前日志文件中的行数大于日志的记录长度,请重新处理该文件,直到两者相等。”
感谢您的帮助!
其他提示
据推测那是因为你看 IN_CLOSE
事件,这可能不会发生,直到服务器关闭(和关闭录文件处理)。看看 男人,(7) 对有效掩参数 inotify_add_watch()
呼叫。我想你会想要使用 IN_WRITE
.
您的理论很可能是正确的,操作系统正在缓冲日志文件,并且日志编写器没有刷新该缓冲区,因此所有内容将保留在缓冲区中,直到关闭文件或缓冲区已满。一种快速的测试方法是,将日志启动到您知道该日志已将事件写入日志的位置,然后强行关闭日志,以使它无法关闭句柄(如果日志为空,则肯定是缓冲区)。如果您掌握了文件句柄/描述符,则可以使用setbuf
删除缓冲,而这会降低性能。
不隶属于 StackOverflow