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 :

aide:appels systemes en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 16
    Par défaut aide:appels systemes en C
    Bonjour,

    J'ai un exercice qui demande d'écrire un programme en C qui accepte un nombre arbitraire de nom de fichiers comme paramètres, ouvre les fichiers, compte le nombre de leurs caractères et affiche les noms des fichiers et leurs tailles (exprimes en nombre de caractères) respectives sur la sortie standard.

    Le programme doit traiter les erreurs dues à l'ouverture des fichiers et afficher les messages d'erreur adéquats.

    Mon problème est lors de la phase de compilation, il m'affiche au maximum le nom et la taille de deux fichiers seulement. Voila mon code source et j'espère que vous pourrez m'aider à résoudre ce problème. Merci d'avance

    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
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <fcntl.h> 
    #include <unistd.h> 
    #define w 1024 
    int main(int argc,char * argv[]){ 
    int fd, nb; 
    char buf; 
    int i=1; 
    if (argc==1) printf("manque d'arguments\n"); 
    else{ 
    while (argv[i]!=NULL){ 
    fd=open(argv[i],O_RDONLY); 
    if (fd==-1) printf("le fichier %s n'existe pas",argv[i]); 
    printf("==> le nom du fichier est: %s\n",argv[i]); 
    while ((nb=read(fd,&buf,w))>0) 
    printf(" sa taille est : %d caracteres\n",nb); 
    printf("\n"); 
    close(fd); 
    i++; 
    } 
    } 
    }
    }

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 36
    Par défaut
    Bonjour,

    Tu peux utiliser ce code:

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
        int count = 0;
        FILE *in_file;
        int ch;
     
        if (argc==1)
        {
            printf("Manque d'arguments !\n");
        } else {
            for(int i = 1; i < argc; i++)
            {
     
                in_file = fopen(argv[i], "r");
                if (in_file == NULL)
                {
                    printf("Le fichier %s n'existe pas !\n", argv[i]);
                    exit(0);
                } else {
                    while (1)
                    {
                        ch = fgetc(in_file);
                        if (ch == EOF)
                        {
                            break;
                        }
                        ++count;
                    }
                    printf("Le fichier %s a %d caractère(s)\n", argv[i], count);
                    fclose(in_file);
                }
            }
        }
        return (0);
    }
    Cordialement,
    Nicolas.

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Citation Envoyé par nikobordx Voir le message
    Bonjour,

    Tu peux utiliser ce code:

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
        int count = 0;
        FILE *in_file;
        int ch;
     
        if (argc==1)
        {
            printf("Manque d'arguments !\n");
        } else {
            for(int i = 1; i < argc; i++)
            {
     
                in_file = fopen(argv[i], "r");
                if (in_file == NULL)
                {
                    printf("Le fichier %s n'existe pas !\n", argv[i]);
                    exit(0);
                } else {
                    while (1)
                    {
                        ch = fgetc(in_file);
                        if (ch == EOF)
                        {
                            break;
                        }
                        ++count;
                    }
                    printf("Le fichier %s a %d caractère(s)\n", argv[i], count);
                    fclose(in_file);
                }
            }
        }
        return (0);
    }
    Cordialement,
    Nicolas.
    Le return étant un mot clé, n'a pas besoin de parenthèse autour de la valeur retournée.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 36
    Par défaut
    Bonjour LittleWhite,

    En fait, j'ai pris le code sur le net et je l'ai rapidement adapté pour les besoins de nadia_inf, effectivement, les parenthèses sont complètement inutiles !

    Nicolas.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Dans le code que vous avez posté, il y a un '}' en trop, à la fin.

    Pour connaitre la taille d'un fichier, il est peut être plus judicieux d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fseek(file,0,SEEK_END); 
    ftell();
    Et votre programme crashe. Vous devriez faire une boucle 'for' de 1 à argc, au lieu du while().
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. aide les appels system
    Par nadia_inf dans le forum C
    Réponses: 1
    Dernier message: 03/12/2011, 16h04
  2. aide appel system
    Par nadia_inf dans le forum C
    Réponses: 2
    Dernier message: 26/11/2011, 11h50
  3. bizarrerie avec l'appel system read sous linux.
    Par Hypnocrate dans le forum C
    Réponses: 20
    Dernier message: 20/11/2005, 02h47
  4. [Système][Appel system linux]Différence dossier /link
    Par busta28 dans le forum Général Java
    Réponses: 5
    Dernier message: 16/04/2005, 22h00
  5. redirection operateur flue >> appel system
    Par philippe V dans le forum MFC
    Réponses: 9
    Dernier message: 16/03/2005, 18h01

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