Bonjour tout le monde,
je débute avec le c et là je me demande comment peut-on developper la commande cp en utilisant la syntaxe cp /tmp/f1 /home/f2 ??
Merci d'avance :D
Version imprimable
Bonjour tout le monde,
je débute avec le c et là je me demande comment peut-on developper la commande cp en utilisant la syntaxe cp /tmp/f1 /home/f2 ??
Merci d'avance :D
Bonjour,
Il faut utiliser les arguments int argc et char ** argv de la fonction main(), qui te permettront d'accéder aux options passées en ligne de commande sous cette forme.
Ensuite, il faut ouvrir les deux fichiers à la fois, lire le contenu du premier et l'écrire dans le second, puis refermer les fichiers.
Bonjour
J'ajouterais aussi, la gestion des répertoires.
à bientôt
C'est encore flou :?
En espérant que ceci t'éclaire :mouarf: :mouarf: :mouarf:Citation:
C'est encore flou
http://c.developpez.com/faq/?page=Co...-environnement
Pour réaliser un programme imitant le fonctionnement de la commande cp tu vas avoir besoin des fonctons open, readet write c'est tout.
Comme dit plus haut tu aura besoin de prendre en paramètre les chemins du premiers fichier et celui où tu veux l'envoyer.
Par exemple si j'ai :
Lorsque tu démarrera ton programme via le terminal il faudra lui placer comme ici des paramètres.Code:
1
2
3
4
5
6
7 int main(int ac, char **argv) { if (ac == 3) printf("%s\n%s\n%s\n", av[0], av[1], av[2]); return (0); }
Si tu as du mal avec les arguments placés en paramètre je te conseille d'essayer de maîtriser cela parfaitement avant de t'attaquer vraiment à cp =)Citation:
# ./prog argument1 argument2 | cat -e
prog$
argument1$
argument2$
#
Voilà si tu as d'autres questions n'hésites pas.
salut,
c'est quoi donc la différence entre ce que tu viens de dire et ce code ? et comment puis-je l'améliorer ?
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 #include <stdio.h> #include <stdlib.h> #define fichier1 "/tmp/f1" #define fichier2 "/home/f2" int main(void) { FILE *f_in, *f_out; int c; if ((f_in = fopen(fichier1,"r")) == NULL) { fprintf(stderr, "\nErreur %s\n",fichier1); return(EXIT_FAILURE); } if ((f_out = fopen(fichier2,"w")) == NULL) { fprintf(stderr, "\nErreur %s\n", \ fichier2); return(EXIT_FAILURE); } while ((c = fgetc(f_in)) != EOF) fputc(c, f_out); fclose(f_in); fclose(f_out); return(EXIT_SUCCESS); }
open renvoie un int quand fopen renvoie un FILE *.
C'est juste que je suis habitué à utiliser open au lieu de fopen, et que dans le cas de cp tu n'as pas vraiment besoin de plus que ceci.
Sinon ton main ne prend rien en paramètre, ce qui est génant dans le cas de la commande cp.
C'est le seul problème qu'il te reste.
Esired t'as mit un lien vers une FAQ ou la première question traite de ce dont tu as besoin^^
donc ça donne ça à la fin ??
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 #include <stdio.h> #include <stdlib.h> #define fichier1 "/tmp/f1" #define fichier2 "/home/f2" int main( int argc, char *argv[] ) { int i; printf( "argc: %d\n", argc ); printf( "argv[0]: %s\n", argv[0] ); if ( argc == 1 ) { printf( "No arguments were passed.\n" ); } else { printf( "Arguments:\n" ); for ( i = 1; i < argc; ++i ) { printf( " %d. %s\n", i, argv[i] ); } } FILE *f_in, *f_out; int c; if ((f_in = fopen(fichier1,"r")) == NULL) { fprintf(stderr, "\nErreur %s\n",fichier1); return(EXIT_FAILURE); } if ((f_out = fopen(fichier2,"w")) == NULL) { fprintf(stderr, "\nErreur %s\n", \ fichier2); return(EXIT_FAILURE); } while ((c = fgetc(f_in)) != EOF) fputc(c, f_out); fclose(f_in); fclose(f_out); return(EXIT_SUCCESS); }
Ton code a l'air d'être correct mais il faudrait retirer "\" au niveau de la ligne 34 de ton code
Bonjour
Si tu indentais un peu mieux ton code (rectification: si tu l'indentais tout simplement) !!! Et il ne faut pas s'appuyer sur exit() pour qu'il fasse les choses à ta place et penser à fermer f_in si f_out ne s'ouvre pas. Et à quoi ça sert d'avoir intégré argc et argv si tu continues à travailler sur /tmp/f1 et /home/f2 (en plus travailler en tant que root !!!!!!!!!! :weird: mais ça c'est un autre problème)
Ensuite copier un fichier caractère par caractère c'est pas super optimisé. Tu peux utiliser fread() et fwrite() qui travaillent avec des tampons de caractères. Tu définis un tampon de taille n, tu demandes un fread() de n octets que tu stockes dans le tampon. Cette lecture te renvoie le nombre m d'octets réellement lus (parce que sur la fin du fichier, tu n'es pas obligé de recevoir le nombre d'octets demandés) et tu demandes alors un fwrite() des m octets pris à partir du tampon.
Et tu t'arrêtes quand fread() renvoie une valeur <= 0 (0 = fin normale, -1 = erreur de lecture).
Et tu n'as même pas vu qu'il y a une section "débutant" dans ce forum ???:roll:
av n'est pas défini...
Pourquoi piper le programme vers un cat ? Et comment fera celui qui travaille sous Windows ? Ici c'est un forum C, pas Unix...