Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 使用mmap并重新加载对文件的更改_Unix_Mmap - Fatal编程技术网

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

Unix 使用mmap并重新加载对文件的更改,unix,mmap,Unix,Mmap,我使用mmap加载一个只有只读访问权限的大文件 预计cron作业会覆盖此文件,每天更新一次内容 我这里的问题是,我的可执行文件如何重新映射更新的文件以获得更新的内容? 我需要再打一次mmap吗?我的可执行文件如何知道文件更新的时间 通常推荐的折衷方法和选项是什么?如果cron作业只是打开文件并覆盖其中的数据,新数据应该立即反映在映射内存中。如果cron作业创建一个新文件,将数据写入其中,然后调用rename()将新文件移到旧文件之上,则需要关闭旧文件,然后重新打开以获取新数据。这样做通常是为了避

我使用mmap加载一个只有只读访问权限的大文件

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

我这里的问题是,我的可执行文件如何重新映射更新的文件以获得更新的内容? 我需要再打一次mmap吗?我的可执行文件如何知道文件更新的时间


通常推荐的折衷方法和选项是什么?

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

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

另一种选择是定期轮询文件的更改以检测更改。但就我个人而言,我会避免这条路线,因为这条路线看起来相当粗糙和不雅