gpt4 book ai didi

perl - Storable.pm - 保存到未截断的文件时损坏

转载 作者:行者123 更新时间:2023-12-03 05:02:23 25 4
gpt4 key购买 nike

在我的生产环境中,我们拥有我们认为的由 Storable.pm 创建的损坏的可存储哈希。我无法复制 Dev 中的行为,这使得准确诊断变得困难。

该代码已经运行了很长时间,以及对其进行的更改中断正在从哈希中删除。直到最近,哈希值要么保持相同的大小,或者变大。

文件以读写方式打开,然后store_fd写入该文件。由于散列现在(有时)较小,因此它将写入 1000 字节到这个2000字节的文件。尾部 1000 字节是旧的垃圾数据。在我的测试用例,当我检索哈希值时,垃圾数据被忽略,如下所示预计。

open( $sf, "+< $self->{mod_state_filename}" );
flock( $sf, LOCK_EX );
$self->{mod_state} = fd_retrieve($sf);
delete ($self->{mod_state}{"somekey"});
seek( $sf, 0, 0 );
store_fd( $self->{mod_state}, $sf );
flock( $sf, LOCK_UN )
close($sf);

我的问题:

  1. 这应该有效吗?我必须截断文件吗?
  2. 存储的哈希是否使用某种文件终止符?如果是这样,它是什么?
  3. 上面的代码,删除以及添加和删除和添加,在我的测试用例中完美运行。能您建议任何测试用例序列这可能会导致它失败,因为未截断的文件? (我知道这个这是一个非常模糊的问题,所以感觉可以忽略它)。

最佳答案

我不知道 Storable 处理尾随垃圾的效果如何,但添加肯定不会有什么坏处

truncate $sf, tell($sf);

在调用store_fd之后,消除了关于它现在和将来是否可以处理它的所有疑问。

关于perl - Storable.pm - 保存到未截断的文件时损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4262584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com