如何在不创建其他进程的情况下访问压缩文件?
|
我的应用程序读取和写入许多中型到大型文件。我想将它们存储为压缩格式。节省磁盘空间和网络时间。
一种方法是这样做:
sub fopen {
my $mode = shift;
my $filename = shift;
if ($filename =~ /\\.gz$/) {
if ($mode eq \"<\") {
open(my $fp, \"-|\", \"/usr/bin/gzcat $filename\");
#my $fp = gzopen($filename, \"rb\") ;
return $fp;
}
if ($mode eq \">\") {
open(my $fp, \"|-\", \"/usr/bin/gzip > $filename\");
#my $fp = gzopen($filename, \"wb\") ;
return $fp;
}
} else {
open(my $fp, $mode, $filename);
return $fp;
}
}
然后,只需交换调用以打开,即可更改现有代码。
从该函数可以明显看出,我还考虑过使用zlib / compress库。问题是结果不能作为文件指针传递。
有没有一种方法可以解决此问题,而无需创建大量额外的流程?
没有找到相关结果
已邀请:
3 个回复
垫歌蝎降凤
现在,变量“ 2”是您可以照常使用的文件句柄。
括宠
坍锭嘉韭蓝