Boss_Med Posté(e) le 15 mai 2009 Share Posté(e) le 15 mai 2009 Salut, j'apprenais la gestion des fichiers en c pour ça j'ai créé un fichier qui contient des liens zip et je l'ai nommé res puis j'ai mis le code suivant #include #include main() { FILE *fr; char c[80]; fr = fopen("res","r"); if (fr==NULL){ printf("Fichier vide\n"); return 1; } else { printf("Téléchargement des liens : \n"); while(fgets(c, 80, fr)!=NULL) printf("%s",c); // j'affiche les liens simplement pour tester system("wget "); //qu'est ce que je met ici pour les télécharger à savoir la fonction system ne prend qu'un seul argument } fclose(fr); return 0; } merci pour l'aide PS:je suis sous linux Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
mouradski Posté(e) le 15 mai 2009 Share Posté(e) le 15 mai 2009 Salem, Pour la fonction system, je pense qu'il suffit de concaténer le paramètre C à la chaîne "wget ", le programme ne continuera la boucle que lorsque cette fonction system soit terminée donc pas de soucis. à chaque itération d ela boucle char* parametre = "wget "; strcat(parametre ,c); system(parametre); Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Darkvader Posté(e) le 15 mai 2009 Share Posté(e) le 15 mai 2009 or try this one if mouradski's solution doesn't work. else { printf("Téléchargement des liens : \n"); while(fgets(c, 80, fr)!=NULL) printf("%s",c); char param[80]; strcpy(param, "wget "); strcat(param, c); system(param); } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
tixxDZ Posté(e) le 15 mai 2009 Share Posté(e) le 15 mai 2009 (modifié) LA SOLUTION a été donnée par mouradski_21 et Darkvader, voici quelques infos vraiment utiles pour un meilleur code: 1) fopen() retourne NULL en cas d'erreurs et non pas si le fichier est vide, pour avoir la déscription: perror("erreur fichier"); /* perror() ou strerror() si tu veut voir la taille de fichier tu utilise la fonction stat() et la structure struct stat, le champ st_size pour les fichier régulier "man 2 stat" */ 2) tu peut utiliser la fonction getline() au lieu de fgets(), pour tout lire et ne pas t'inquité de la taille de ton buffer: - il faut definir la macro: #define _GNU_SOURCE - pour avoir un exemple: "man 3 getline" 3) pour que la fonction system prend plusieurs arguments: - alloué la mémoire au buffer selon la taille de l'input (argument de getline() + "wget ") size_t SIZE == strlen("wget ") + size input; buffer = (char *) malloc (SIZE); memset(buffer, 0x00, SIZE); snprintf(buffer, "wget %s", SIZE, url); system(buffer); free(buffer); /* il faut checké les erreurs */ - MIEUX ENCORE, si tu ne veut pas attendre que system() retourne: - fork() - execv(argv[0], argv) - FAIT ATTENTION à la valeur de url (qui la control), exemple: url == "google.com; echo hello" system("wget google.com; echo hello"); /* le code echo hello s'éxécute aussi, faille de sécurité */ 4) si tu veut coder aussi ton compresseur/décompresseur: utilise la zlib - /usr/share/doc/zlib*/ - "man zlib" - le site de la zlib 5) UNE AUTRE MINE D'INFO pour la libc - fait un stage bloqué avec la commande: "info libc" - tu aura tout gestion d'érreur mémoire fichier ... ESSAYE: "info libc" Bonne chance et si tu veut vraiment programmer au top fait le sous linux *unix et il faut lire beaucoup de code source, bonne chance. PS: il seut peut qu'il y a des erreurs et désolé pour les fautes d'ortho. Modifié le 15 mai 2009 par tixxDZ correction de sizeof Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boss_Med Posté(e) le 15 mai 2009 Auteur Share Posté(e) le 15 mai 2009 @Mouradski : le programme me donne "Erreur de segmentation". @Darkvader : ça marche mais j'ai une petite question strcpy(param, "wget "); strcat(param, c); ces deux instructions vont faire quoi au juste ? @tixxDZ : merci mon frère tu m'a bien aidé mème si il y a des choses que je ne comprend pas mais je vais me documenter. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Darkvader Posté(e) le 15 mai 2009 Share Posté(e) le 15 mai 2009 @Mouradski : le programme me donne "Erreur de segmentation". @Darkvader : ça marche mais j'ai une petite question strcpy(param, "wget "); strcat(param, c); ces deux instructions vont faire quoi au juste ? @tixxDZ : merci mon frère tu m'a bien aidé mème si il y a des choses que je ne comprend pas mais je vais me documenter. strcpy "String Copy" copies the string "wget " into param, and then it concatenates param and c (wget + c) with strcat (String concat). You can find all these instructions and more online. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boss_Med Posté(e) le 15 mai 2009 Auteur Share Posté(e) le 15 mai 2009 ah ok merci j'ai trés bien compris maintenant Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
mouradski Posté(e) le 15 mai 2009 Share Posté(e) le 15 mai 2009 @Mouradski : le programme me donne "Erreur de segmentation". C'est sûrement qu'il n'a pas digéré le char* comme char[] je pense que c'est ce que DarkVader faisait allusion, ça passe avec le même type ie tableau de char. mais sinon si t'es sur C/C++ un "wget " + param aurait fait l'affaire car le + est un opérateur surchargé pour le type chaîne de caractères. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
tixxDZ Posté(e) le 15 mai 2009 Share Posté(e) le 15 mai 2009 juste une petite correction Boss_med: et si ton buffer et un pointeur de la sorte: char *buffer = (char *) malloc (SIZE); alors le code suivant est incorrecte (copie seulement 4 octets): snprintf(buffer, "wget %s", sizeof(buffer), url); car le code sizeof(buffer) va retourné 4 octets, c'est le size d'un pointeur sur 32 bits. correction: size_t SIZE == strlen("wget ") + size input; char *buffer = (char *) malloc (SIZE); snprintf(buffer, "wget %s", SIZE, url); /* snprintf() ajoute toujours le NULL '\0' à la fin */ désolé c'été à la va vite (la prière) comme Darkvader a dit: tu peut trouver online ou avec la commande man n'oublie pas la commande "info libc" @mouradski_21 c'est ton background de c# salam Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boss_Med Posté(e) le 15 mai 2009 Auteur Share Posté(e) le 15 mai 2009 ok je pige une chose est sur il y a beaaaaaaaacoup de chose à apprendre Lol Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
mouradski Posté(e) le 15 mai 2009 Share Posté(e) le 15 mai 2009 @mouradski_21 c'est ton background de c# salam lol wé, vive le transtypage à volonté et comme on dit "les ignorants sont bénis" moins j'en sais sur les rouages mieux c'est Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Darkvader Posté(e) le 15 mai 2009 Share Posté(e) le 15 mai 2009 lol wé, vive le transtypage à volonté et comme on dit "les ignorants sont bénis" moins j'en sais sur les rouages mieux c'est What's wrong with C#? it is a great language, you don't have to build everything from scratch, and certainly you don't have to reinvent the wheel, so don't feel offended by Tixxdz remarks. C# is a subset of C++ which is a subset of C. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
mouradski Posté(e) le 15 mai 2009 Share Posté(e) le 15 mai 2009 What's wrong with C#? it is a great language, you don't have to build everything from scratch, and certainly you don't have to reinvent the wheel, so don't feel offended by Tixxdz remarks. C# is a subset of C++ which is a subset of C. Oui je pense aussi que le C# est un langage terriblement efficace, j'en suis même tombé amoureux je pense même que c'est le langage le plus productif du marché Mais je penses qu'on doit arreter de trop chercher la simplilcité, d'ici quelques années on va programmer directement en UML, un clic de souris et c'est compilé :D et ça sera le chaumage pour toi Tu lâches pas l'affaire de la roue hein Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
anubis_1001 Posté(e) le 15 mai 2009 Share Posté(e) le 15 mai 2009 C# is a subset of C++ which is a subset of C. salam, voici une citation de wikipédia: Il est très proche du Java dont il reprend la syntaxe générale ainsi que les concepts (la syntaxe reste cependant relativement semblable à celles de langages tels que le C++ et le C). Un ajout notable à Java est la possibilité de surcharge des opérateurs, inspirée du C++. Toutefois, l'implémentation de la redéfinition est plus proche de celle du Pascal Objet. donc le c# est "un mélange" du c++ java et pascal (c# étant créé par le même créateur que le pascal) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
tixxDZ Posté(e) le 15 mai 2009 Share Posté(e) le 15 mai 2009 Yes what Darkvader says is correct, C# is great and each language has its power. IMHO: if you are not doing low level programming then use Java, C#, Python, ... personally i code this things with Perl or Python. The important thing is to learn and to code cool and new stuff. I didn't mean to offen any body it was a simple way to clarify mouradski_21 solution. lol mouradski_21: j'éspère que tu va me laisser nager à Ben M'hidi (il me faut une boué). Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
mouradski Posté(e) le 15 mai 2009 Share Posté(e) le 15 mai 2009 I didn't mean to offen any body it was a simple way to clarify mouradski_21 solution. lol mouradski_21: j'éspère que tu va me laisser nager à Ben M'hidi (il me faut une boué). Je viens de te blacklister auprès des gardiens des parcs auto des plages de ben m'hidi non, je ne me suis pas du tout senti offensé Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Darkvader Posté(e) le 15 mai 2009 Share Posté(e) le 15 mai 2009 Oui je pense aussi que le C# est un langage terriblement efficace, j'en suis même tombé amoureux je pense même que c'est le langage le plus productif du marché Mais je penses qu'on doit arreter de trop chercher la simplilcité, d'ici quelques années on va programmer directement en UML, un clic de souris et c'est compilé :D et ça sera le chaumage pour toi Tu lâches pas l'affaire de la roue hein lol. Drag and drop programming is already here. As for me losing my job, don't worry, there are plenty of dishes to be washed in some restaurants. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
mouradski Posté(e) le 15 mai 2009 Share Posté(e) le 15 mai 2009 lol. Drag and drop programming is already here. As for me losing my job, don't worry, there are plenty of dishes to be washed in some restaurants. Je ne crois pas que tu fasses plus d'une journée dans le lavage de vaisselle c'est pas aussi simple qu'un Dishes.Wash() l'objet dans la vie réel n'est pas autonome il faut vraiment connaitre sa roue Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.