在我的机器上,我有一个由应用程序每秒重新生成的文件 - 它每次都包含不同的数据,因为它基于一些实时数据。
我想要一份此文件的副本,其中包含 5分钟前原始文件包含的内容。这在某种程度上很容易实现吗?我很乐意使用一些BASH脚本魔术来做到这一点,但是为原始应用程序添加一些明智的,内存有效的代码(用c ++编写)也会让我满意:)
答案 0 :(得分:2)
您使用linux和unix标记了您的问题。这个答案仅适用于Linux。
您可以使用inotify-tools(inotifywait
man
page)或incron(incrontab(5)
man
page)观看目录,并在文件关闭时制作文件副本。< / p>
答案 1 :(得分:1)
如果磁盘空间不是问题,您可以让程序每秒创建一个新文件,而不是写入同一个文件。您需要总共300个文件(5 min * 60 sec/min)
。要写入的文件名为$somename + timestamp() % 300
。这样,为了在5分钟前获取文件,您只需访问文件{{1} }。
答案 2 :(得分:1)
为了实现这一点,您需要空间来容纳300(5 * 60)个文件。由于您指示文件大小仅为50K左右,因此可以在15MB内存中使用(如果您不想使文件系统混乱)
它应该像:(类似的东西)
struct {char* buf; size_t size} hist[300]; //initalize to all nulls.
int n = 0;
struct stat st;
for(;;sleep(1)){
int ifd = open("file", O_READ);
int ofd = open("file-lag", O_WRITE);
stat(ifd, &st);
hist[n].size = st.st_size;
if(hist[n].buf)
free(hist[n].buf);
buffer[n] = malloc(hist[n].size);
read(ifd, hist.buf[n], hist[n].size);
n = (n+1)%300;
if(hist[n].buf)
write(ofd, hist.buf[n], hist[n].size)
close(ofd);
close(ifd);
}