IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Fonction system() avec commandes unix dans boucle


Sujet :

C

  1. #21
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    En regardant plus attentivement le code, il y a plusieurs autres problèmes potentiels :

    • Il manque les tests des codes retour des différentes fonctions, en particulier de fopen().
    • Il n'y a pas de vérifications des formats et de la taille des buffer. A la moindre erreur de format dans un des fichiers et le programme part en sucette.
    • Pourquoi ouvrir les fichiers en mode "r+", en général c'est source de problème. Si tu veux seulement les lire, "r" suffit.
    • Certains fichiers ouverts dans la boucle ne sont pas refermés (mais réouverts au passage suivant), par exemple "logindex3.log".
    • Le comportement de fflush(stdin) n'est pas défini par la norme. En outre je ne vois pas ce que tu essaies de faire ici avec cet appel.
    • Tu manipules les fichiers à la fois directement dans ton code (appel à fopen, fscanf, etc.) et au travers d'autres fonctions qui manipules le nom de fichier (file_line_delete, file_delete, etc.). Es-tu certain qu'il n'y a pas d'interférence possible entre les deux ? En général ce n'est pas une bonne idée de mélanger les styles de la sorte.
    • L'écriture

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      char files_rep[64];
      strcpy(files_rep, "./logwork/3");
      est une façon compliquée d'écrire

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      char files_rep[] = "./logwork/3";
      En outre je ne vois pas l'intérêt de passer par une variable temporaire ici, autant l'utiliser directement dans la chaîne de commande.
    • Beaucoup de valeur numérique et de chaîne de caractère en dur dans le code. Il serait plus simple de les passer en globales "static const" ou en define.
    • Pourquoi créer et initialiser index_name pour ensuite utiliser la chaîne en dur dans le code et pas la variable ?
    • Les commentaires // et la déclaration de variable au milieu du code sont autorisé en C99 pas en C90.
    • Certaines opérations et déclarations de variable gagneraient probablement à être sortie de la boucle.
    • Certains appels à fscanf() pourrait avantageusement être remplacés par des appels à fgets().
    • Puisque tu utilises visiblement un compilateur C99, tu devrais remplacer sprintf() par snprintf().

  2. #22
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    J'ai corrigé mon code suivant tes indication et ca fonctionne, t'es un vrai chef, merci !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/03/2011, 13h47
  2. Réponses: 3
    Dernier message: 19/06/2007, 11h27
  3. commandes unix dans un programme C
    Par thepinguin dans le forum C
    Réponses: 9
    Dernier message: 19/10/2006, 02h11
  4. Réponses: 22
    Dernier message: 09/12/2005, 21h27
  5. Réponses: 1
    Dernier message: 20/08/2004, 09h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo