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
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
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
Celui qui peut, agit. Celui qui ne peut pas, enseigne.
Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien,
et les philosophes, qui ne connaissent rien sur tout.
George Bernard Shaw
En espérant que ceci t'éclaireC'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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 =)# ./prog argument1 argument2 | cat -e
prog$
argument1$
argument2$
#
Voilà si tu as d'autres questions n'hésites pas.
Keep calm and debug ...
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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^^
Keep calm and debug ...
donc ça donne ça à la fin ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 !!!!!!!!!! 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 ???
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...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager