Se connecter avec
S'enregistrer | Connectez-vous

Code PERL à comprendre

Dernière réponse : dans Programmation

En fait, j'ai récupérer un programme PERL qui permet de lire un fichier audio sur le serveur par un client http. J'aimerai trouver l'équivalent en C ou encore, passer le code PERL en C.

Voici le code PERL (appelé dans un tag HTML de type <EMBED>) :

sub read_audio()
{
my $msgid = param('msgid');
my &format = param('format');
my $path = "/var/spool/test.wav";

$msgid =~ /^\d\d\d\d$/ || die("Wrong msg ($msgid)!");
grep(/^${format}$/, keys %formats) || die("Wrong Format ($format)!");

# Mailbox and folder are already verified
if (open(AUDIO, "<$path"))
{
$size = -s $path;
$|=1;
print header(-type=>$formats{$format}->{'mime'}, -Content_length => $size);

while(($amt = sysread(AUDIO, $data, 4096)) > 0)
{
syswrite(STDOUT, $data, $amt);
}

close(AUDIO);
}
else
{
die("Cannot open $path\n");
}
}


Quelqu'un pourrait-il m'aider à comprendre le code en gras ? Je ne connais pas le PERL mais plutôt le C...

Merci d'avance.
Made

Autres pages sur : code perl comprendre

Lassé par la pub ? Créez un compte

la 1ère ligne en gras, c'est pour vérifier que le fichier appelé est bien un fichier sonore, les extensions sont probablement présentes dans %format plus haut.

La deuxième partie en gros, c'est pour écrire les header : la commande print header) : déclarer le type de fichier au navigateur qui appelera le script (mime type), et ensuite 'streamer' le fichier son (lecture du fichier sur le serv : sysread et 'écriture' vers le client : syswrite) :) 

xstephx a écritla 1ère ligne en gras, c'est pour vérifier que le fichier appelé est bien un fichier sonore, les extensions sont probablement présentes dans %format plus haut.

La deuxième partie en gros, c'est pour écrire les header : la commande print header) : déclarer le type de fichier au navigateur qui appelera le script (mime type), et ensuite 'streamer' le fichier son (lecture du fichier sur le serv : sysread et 'écriture' vers le client : syswrite) :) 


Ok, merci bcp pour ton aide.
En fait, j'aurai aimé savoir pour la partie header du fichier ce qui est exactement écrit ou déclarer :
print header(-type=>$formats{$format}->{'mime'}, -Content_length => $size);

Et concernant le streaming, est-ce qu'il diffère d'une fonction C comme fprint et fread ? Si oui, quelle est la différence ? et le 4096 à la taille du buffer ?

Merci encore,
Made.

ce qui est déclaré c'est un header normal (je ne connais pas la syntaxe exacte, mais c un header quoi, juste pour indiquer le mime type du fichier (et la taille)).

Sinon, je ne sais pas te répondre pour la suite :( 
Lassé par la pub ? Créez un compte