Envoyé par
rufa11
Bonjour,
Lors de mon TP, il faut que je simule l'exécution de la commande cat, j'ai créer un fichier que j'ai nommé File_cat et je doit afficher le contenue des fichiers entrés en ligne de commande, mais jusqu'a maintenant je me bloque sur l'affichage des fichiers entrés en ligne de commande en parcourant le tableau argv[i], exemple: cat file file2 file3... filen, mon code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
#include <fcntl.h> /* pour utliser des constantes comme O_RDWR*/
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[]){
int fd,i;
FILE *fichier = NULL;
char caractere;
/* Ouverture/Création du fihier File_cat en Lécture/Ecriture*/
if ((fd=open("File_cat", O_RDWR|O_CREAT|O_TRUNC,0644))==-1) {
perror("Ouverture impossible de File_cat");
exit(1); /* pour tuer le processus appelant en cas d'une fin anormale, et dans le cas d'une fin normale alors exit(0)*/
}
/* Fermeture de la sortie standard */
close(1);
/* Redirection de File_cat sur la sortie standard */
if (dup(fd) <0) {
perror("Duplication impossile");
exit(1);
}
/*Affichage des fichies en entrées de la ligne de commande*/
for(i=argc;i>=1;i--)
{
fichier = fopen (argv[i], "r"); /* On ouvre le fichier dont le chemin est accessible via argv[1] */
if (fichier != NULL)
{
do
{
caractere = fgetc (fichier);
printf("%c", caractere);
} while (caractere != EOF);
}
else exit(EXIT_FAILURE);
getchar();
return EXIT_SUCCESS;
}
/* Fermeture du descripteur fd */
close(fd);
/* Recouvrement du process courant par le code de cat */
execlp("cat", "cat", NULL);
perror("Lancement de cat");
close(0);
return(0);
} |
SVP à votre avis, c'est quoi le problème.
Salut
Déjà à vue de nez un premier bug rapide: Tu lis un caractère que tu affiches avant de vérifier qu'il n'est pas EOF. Donc tu affiches EOF aussi. Et utiliser printf() pour 1 caractère est super long !!!
while ((c=fgetc(fichier)) != EOF) fputc(c, stdout);
.
De plus le flag O_RDWR n'est pas bon. C'est O_WRONLY qu'il faut.
Et si tu avais posté dans la bonne rubrique (cat C) tu aurais déjà eu la réponse...
Partager