bonjour,
je dois dans le cadre de mon cours programmer la commande locate qui permet de rechercher un fichier dans l'arborescence du disque dur.
Celle ci fonctionne en deux partie :
- la commande updatedb qui parcours l'intégralité du disque et enregistre dans un fichier l'ensemble de l'arborescence.
- locate parcourt le fichier afin de trouver les occurrences.
pour ceci je n'ai ni le droit d'utiliser locate ni find
j'ai pensé utiliser des tubes et les fonction execl
jusqu'ici j'arrive a écrire sur la sortie standard le contenu du disque mais je n'arrive pas a le rediriger dans le fichier
if(pipe (p)<0)
exit(-1);
if((pid1 = fork())<0)
exit(-2);
if(pid1 == 0) // fils1
{
close(p[0]); //fermeture du tube de lecture
dup2(p[1],1); // duplication du tube d'ecriture dans la sortie standard
close(p[1]); // fermeture du tube d'ecriture
printf("ls -al\n");
execl("/bin/ls", "ls", "-aRl", "/", NULL); //execution de la commande ls -al /
}
else
{
if((pid2 = fork())<0)
exit(-3);
if(pid2 == 0) //fils2
{
dup2(p[0], 1 ); //duplication du tube de lecture dans la sortie standard
close(p[0]); //fermeture du tube de lecture
close(p[1]); //fermeture du tube d'ecriture
printf("grep\n");
execl("/bin/grep", "grep", "rwxrwxrwx", NULL); //execution de grep pour extraire les lignes contenant tous les droits
exit(-1);
}
else
{
if((pid3 = fork())<0)
exit(-3);
if(pid3 == 0) //fils3
{
while(read(1, &c, 1)>0)
{
write(fd1, &c, 1);
}
close(p[0]);
close(p[1]);
printf("ecriture dans locate.database\n");
}
else
{
close(p[0]);
close(p[1]);
close(fd1);
wait(&ret);
wait(&ret);
wait(&ret);
exit(0);
en plus depuis mes derniers rajouts le programme bug donc si vous avez une idée je suis toute ouïe
merci d'avance
Partager