Comment puis-je accéder les fichiers gzip sans créer de nouveaux processus?

Mon application lit et écrit beaucoup de moyen pour les gros fichiers. Je voudrais stocker ces informations en format zippé. Économise de l'espace disque et de temps réseau.

Une façon de le faire est avec ceci:

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;
  }
}

Je peux changer mon code existant tout simplement en échangeant les appels à ouvrir.

Ainsi qu'il ressort de la fonction, j'ai aussi pensé à utiliser la librairie zlib/compresser de la bibliothèque. Le problème est que le résultat ne peut être passée autour d'un pointeur de fichier.

Est-il un moyen de le faire ce qui n'a pas impliqué la création d'un groupe de processus supplémentaire?

Processus supplémentaire PEUT être utile. Si votre perl processus est beaucoup de travail et que vous avez plusieurs processeurs, vous pourriez obtenir de meilleures performances en avoir un autre processus (sur 1 CPU) dédié à la zip/unzip et puis tout un processus (sur un 2ème CPU) dédié à votre programme perl.
L'ordinateur travail est pour l'exécution des processus pour vous. Échappent pas.

OriginalL'auteur mmccoo | 2011-04-14