tchiibo
Messages postés11Date d'inscriptionmardi 22 septembre 2009StatutMembreDernière intervention20 novembre 2010
-
9 déc. 2009 à 13:06
tchiibo
Messages postés11Date d'inscriptionmardi 22 septembre 2009StatutMembreDernière intervention20 novembre 2010
-
9 déc. 2009 à 15:06
bonjour,
je voudrais en c++ créer un tube bidirectionnel
qui permetrais comme en bash ma t-on dit de réaliser cette comande :
cat nom_du_fichier.wav /lame --/gzip >up.mp3.gz
à l'aide de execlp et de fork pour la création de père et de fils.
le script changerai un fichier wav en mp3 à l'aide de lame et ensuite le zipperai à l'aide de gzip.
merci
tchiibo
Messages postés11Date d'inscriptionmardi 22 septembre 2009StatutMembreDernière intervention20 novembre 2010 9 déc. 2009 à 15:06
merci. je poste le code, il marche.
il suffit de compiler enregistrer,
puis sur la commande g++ main.cpp nom_du_fichier
ensuite mettez un fichier wav là ou est l'exécutable. Et voila il converti le wav en mp3 et le zip.
perror ("erreur a la creation du tube pd");
exit(1);
}
if (pipe(lamegzip)==-1)
{
perror ("erreur a la creation du tube pd2");
exit(1);
}
if (fork()==0)
{//le fils est chargé de l'affichage du fichier
dup2 (catlame[1],1);// redirection de la sortie standard vers l'entré du tube
close (catlame[0]);//on ferme le descripteur servant a la lecture ds le tube car fils ne lit pas ds tube
close (catlame[1]);//ferme le descripteur servant a l'écriture ds le tube devenu inutile ûisque redirigé
close (lamegzip[0]);
close (lamegzip[1]);
execlp("cat","cat",argv[1],NULL);
perror("erreur sur cat");
exit(0);
}
if (fork()==0)
{//fils charger de la convertion du wav en mp3
dup2 (catlame[0],0);// redirection de la sortie standard vers l'entré du deuxième tube
close (catlame[0]);
close (catlame[1]);
dup2 (lamegzip[1],1);
close (lamegzip[0]);
close (lamegzip[1]);
execlp("lame","lame","-","-",NULL);
perror("erreur sur lame");
exit(0);
}
//père s'occupe de la compression du mp3
dup2 (lamegzip[0],0);//on dirige la sortie du tube sur l'entée standard
close (lamegzip[0]);//on ferme le descripteur servant a l'écriture car père n'ecrit pas
close (lamegzip[1]);//on ferme descripteur lecture car devenu inutile car rediriger
close (catlame[0]);
close (catlame[1]);
dup2 (fd_fichier,1);
execlp("gzip","gzip",NULL);
perror("erreur sur gzip");