延迟文件数据几分钟

时间:2012-06-14 17:50:05

标签: c++ linux bash unix

在我的机器上,我有一个由应用程序每秒重新生成的文件 - 它每次都包含不同的数据,因为它基于一些实时数据。

我想要一份此文件的副本,其中包含 5分钟前原始文件包含的内容。这在某种程度上很容易实现吗?我很乐意使用一些BASH脚本魔术来做到这一点,但是为原始应用程序添加一些明智的,内存有效的代码(用c ++编写)也会让我满意:)

3 个答案:

答案 0 :(得分:2)

您使用标记了您的问题。这个答案仅适用于Linux。

您可以使用inotify-toolsinotifywait man page)或incronincrontab(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);
}