OVH Cloud OVH Cloud

Trop de fichier ouvert

1 réponse
Avatar
mg
salut,

jai un script perl qui lit un fichier contenat des lignes de commandes
(4000).
voici le script

#! /usr/bin/perl -w

if (!open (PF,"<num.txt"))
{
print "Erreur de lecture du fichier ";
exit(1);
}
while (defined($l=<PF>))
{

chomp ($l);
open (CMDD,"|$l");
sleep (100);
}
close(PF);

sa marche bien sauf que au bout d'un nombre plus moins grand , le systeme se
bloque et jai un message comme quoi trop de fichier ouvert.

merci de votre aide.

1 réponse

Avatar
jb
#! /usr/bin/perl -w

use strict;

while (<DATA>)
{
chomp;
next if $_ =~ /^s*$/;
open (CMD,"$_|")
or die "Ne peut executer la commande $_";
print <CMD>;
close CMD;
my $status = $?;
$status = $? >> 8 if $status;
print "status: " . ($status) . "n";
sleep (1);
}


1;

__DATA__
echo
echo plop

echo toto
gi
date /T

Je pense que tu n'utilise pas la bonne version de open. Tu fais open
FH, "|foo" ce qui ouvre un canal en écriture, à mon avis open FH,
"foo|" est plus ce que tu recherches. En
outre l'ouverture d'un canal en écriture n'échoue jamais dans ce cas
il faut registrer le signal pipe afin de détecter les erreurs
eventuels.

local $SIG{PIPE} = sub { die "spooler pipe broke" };

Voir perlipc :)