Le but est d'afficher le contenu de plusieurs fichiers passé en paramètre à l'écran Ou dans fichier si on fait une redirection
En c of course^^
Erreur.c
- Code: Tout sélectionner
void Erreur(char *Message, int retour)
{
perror(Message);
exit(retour);
}
afficher.c
- Code: Tout sélectionner
#define TAILLE 512
int afficher(char *nomFichier)
{
char buffer[TAILLE];
int nbLu=0;
int fd=open(nomFichier,O_RDONLY,0);
if(fd!=-1)
{
while((nbLu=read(fd,buffer,TAILLE))!=0) //tant que l'on a pas lu tout le fichier
{
write(1,buffer,nbLu);
}
}
else
{
Erreur("open:",99);
}
return 0;
}
Le main
- Code: Tout sélectionner
int main(int argc, char const *argv[])
{
int k;
int estPresent=0;
int estEgal=-1;
int pos=-1;
//argv[0] est le nom du programme on ne le traite pas
for(k=1;k concat dans fich
strcat(fich,argv[k]);
estEgal=strcmp(">",argv[k]);//On cherche s'il y a une redirection
if(estEgal==0)
{
estPresent++;
pos=k+1;//on stocke la position du dernier fichier où on va écrire
}
}
if(estPresent==0)//s'il n'y a pas de redirection, on affiche tous les fichiers sur l'écran
{
for(k=1;k concat dans fich
strcat(fich,argv[k]);
afficher(fich);
}
}
else//s'il y a une redirection
{
char* fichDest="";
fichDest = malloc (50 * sizeof(char));
strcat(fichDest,argv[pos]);
int fd=open(fichDest,O_WRONLY,0);
if(fd!=-1)
{
//si le fichier est bien ouvert en écriture
int save=dup(1);//sauvegarde de l'écran
dup2(fd,1);//on écrase l'écran avec fd
close(fd);//on garde uniquement la copie dans
/***On réalise l'affichage***/
for(k=1;k comme un fichier !!!
{
char* fich="";
fich = malloc (50 * sizeof(char));
//argv étant un const char* on ne peut pas l'utiliser directement dans afficher ==> concat dans fich
strcat(fich,argv[k]);
afficher(fich);
}
}
dup2(save,1);//on replace la sauvegarde de l'écran dans 1
close(save);//supression du doublon
}
else //si le fichier ou on veut écrire n'existe pas
{
Erreur("open: Le fichier Destination n'existe pas",99);
}
}
return 0;
}
Il semblerait que j'écrive les fichiers passé en paramètres à l'infini dans le fichierDestination et franchement je vois pas du tout pourquoi ça me fait ça è_é