Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.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
C++ 将文件数据延迟几分钟_C++_Linux_Bash_Unix - Fatal编程技术网

C++ 将文件数据延迟几分钟

C++ 将文件数据延迟几分钟,c++,linux,bash,unix,C++,Linux,Bash,Unix,在我的机器上,我有一个由应用程序每秒重新生成的文件——它每次都包含不同的数据,因为它基于一些实时数据 我想要一份此文件的副本,其中包含5分钟前原始文件所包含的内容。这很容易实现吗?我很乐意使用一些BASH脚本魔法来实现这一点,但是向原始应用程序(用c++编写)添加一些明智的、节省内存的代码也会让我满意:)如果磁盘空间不是问题,您可以让程序每秒创建一个新文件,而不是写入同一个文件。您总共需要300个文件(5分钟*60秒/分钟)。要写入的文件名将是$somename+timestamp()%300。

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


我想要一份此文件的副本,其中包含5分钟前原始文件所包含的内容。这很容易实现吗?我很乐意使用一些BASH脚本魔法来实现这一点,但是向原始应用程序(用c++编写)添加一些明智的、节省内存的代码也会让我满意:)

如果磁盘空间不是问题,您可以让程序每秒创建一个新文件,而不是写入同一个文件。您总共需要300个文件(
5分钟*60秒/分钟)
。要写入的文件名将是
$somename+timestamp()%300
。这样,要在5分钟前获取文件,您只需访问文件
$somename+(timestamp()+1)%300

如果磁盘空间不是问题,您可以让程序每秒创建一个新文件,而不是写入同一个文件。您总共需要300个文件(
5分钟*60秒/分钟)
。要写入的文件名将是
$somename+timestamp()%300
。这样,要在5分钟前获取文件,您只需访问文件
$somename+(timestamp()+1)%300

为了实现这一点,您需要空间来容纳300(5*60)个文件中的每一个。由于您指出文件的大小只有大约50K,所以在15MB内存中这是可行的(如果您不想使文件系统变得混乱的话)

它应该简单到:(类似于)


为了实现这一点,您需要空间来容纳300(5*60)个文件中的每个文件。由于您指出文件的大小只有大约50K,所以在15MB内存中这是可行的(如果您不想使文件系统变得混乱的话)

它应该简单到:(类似于)


你在问题上加了和。这个答案只适用于Linux


您可以使用()或()来查看目录,并在文件关闭时复制文件。

您将问题标记为和。这个答案只适用于Linux


您可以使用()或()来监视目录,并在文件关闭时复制它们。

您能简单地将数据存储在变量中吗?或者一个临时文件?是
而不是true;5年前做cp文件;睡眠300;完成
你在找什么?戴夫:如果他需要始终能够看到文件在5分钟前的样子,他需要每秒复制一次文件,并保留过去5分钟的副本(即300份文件)。@戴夫:不完全是,我需要每秒钟更新一次副本文件,然而,对于过时的数据,延迟文件并不是不可能的,但是有一些技巧可能要简单得多。如果您只是在末尾添加数据,为什么不使用一个文件,给所有条目加上时间戳,然后一直读到5分钟前?或者,如果没有顺序地添加,则将一个映射(以C++为基础)从记录保存到时间戳。这听起来合理吗?你能简单地将数据存储在变量中吗?或者一个临时文件?是
而不是true;5年前做cp文件;睡眠300;完成
你在找什么?戴夫:如果他需要始终能够看到文件在5分钟前的样子,他需要每秒复制一次文件,并保留过去5分钟的副本(即300份文件)。@戴夫:不完全是,我需要每秒钟更新一次副本文件,然而,对于过时的数据,延迟文件并不是不可能的,但是有一些技巧可能要简单得多。如果您只是在末尾添加数据,为什么不使用一个文件,给所有条目加上时间戳,然后一直读到5分钟前?或者,如果没有顺序地添加,则将一个映射(以C++为基础)从记录保存到时间戳。这听起来合理吗?注意:
%
表示“模”。替换为bash中提供此功能的任何函数。(我主要是一名PHP程序员)可以在bash中的$(())算术块中使用%运算符。完整的等价表达式(假设您有一个“timestamp”函数)是“$somename$($(timestamp)%300”),第二个表达式是“$somename$(($(timestamp)+1)%300”)。注意:
%
表示“模”。替换为bash中提供此功能的任何函数。(我主要是一名PHP程序员)可以在bash中的$(())算术块中使用%运算符。完全等价的表达式(假设您有一个“timestamp”函数)是“$somename$($(timestamp)%300”),第二个表达式是“$somename$(($(timestamp)+1)%300”)。
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);
}