Unix 使用mmap并重新加载对文件的更改
我使用mmap加载一个只有只读访问权限的大文件 预计cron作业会覆盖此文件,每天更新一次内容 我这里的问题是,我的可执行文件如何重新映射更新的文件以获得更新的内容? 我需要再打一次mmap吗?我的可执行文件如何知道文件更新的时间Unix 使用mmap并重新加载对文件的更改,unix,mmap,Unix,Mmap,我使用mmap加载一个只有只读访问权限的大文件 预计cron作业会覆盖此文件,每天更新一次内容 我这里的问题是,我的可执行文件如何重新映射更新的文件以获得更新的内容? 我需要再打一次mmap吗?我的可执行文件如何知道文件更新的时间 通常推荐的折衷方法和选项是什么?如果cron作业只是打开文件并覆盖其中的数据,新数据应该立即反映在映射内存中。如果cron作业创建一个新文件,将数据写入其中,然后调用rename()将新文件移到旧文件之上,则需要关闭旧文件,然后重新打开以获取新数据。这样做通常是为了避
通常推荐的折衷方法和选项是什么?如果cron作业只是打开文件并覆盖其中的数据,新数据应该立即反映在映射内存中。如果cron作业创建一个新文件,将数据写入其中,然后调用
rename()
将新文件移到旧文件之上,则需要关闭旧文件,然后重新打开以获取新数据。这样做通常是为了避免在重写文件时发生电源故障时数据损坏
至于如何得到通知,有几种可能性。最简单的方法可能是让cron作业只向您的进程发送一个信号(例如,SIGUSR1
)。然后你就可以对信号做出反应,开始工作。否则,您可以使用(在Linux上)监视文件的写入
另一种选择是定期轮询文件的更改以检测更改。但就我个人而言,我会避免这条路线,因为这条路线看起来相当粗糙和不雅