使用mmap并重新加载对文件的更改

时间:2014-04-07 07:40:56

标签: unix mmap

我正在使用mmap加载一个只有READ-ONLY访问权限的大文件。

预计,cron作业会每天使用更新的内容覆盖此文件一次。

我的查询是,我的可执行文件如何重新映射更新的文件以获取更新的内容? 我需要再次调用mmap吗?我的可执行文件如何知道文件何时更新?

通常推荐的权衡方法和选项是什么?

1 个答案:

答案 0 :(得分:2)

如果cron作业只是打开文件并覆盖其中的数据,新数据应立即反映在映射的内存中。如果cron作业创建一个新文件,在那里写入数据,然后调用rename()将新文件移到旧文件之上,则需要关闭旧文件并重新打开以获取新数据。这通常是为了避免在重写文件时发生电源故障时数据损坏。

至于如何获得通知,有几种可能性。最简单的方法可能是让cron作业向您的流程发送信号(例如SIGUSR1)。然后,您可以对信号做出反应并开展工作。否则,您可以使用inotify(在Linux上)监视文件以进行写入。

另一种选择是定期轮询文件mtime以检测更改。就我个人而言,我会避开这条路线,因为它似乎相当黑客和不优雅。