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 :

IF en C shell


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2014
    Messages : 45
    Par défaut IF en C shell
    Bonjour,
    J'aimerais savoir comment vérifier si un fichier existe en C shell
    Voici mon 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
    #include <time.h>
    #include <arpa/inet.h>
    #include <ifaddrs.h>
    #include <netdb.h>
    #include <pthread.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main (void)
    {
        if("/etc/monprog.conf")
    	{
        printf("Le fichier existe !");
    	}else{ 
    	printf("Le fichier existe pas !");
    	}
     
     
       printf ("\ok\n");
     
       return 0;
    }

    Merci d'avance
    Cordialement

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 256
    Par défaut
    Il te faut utiliser fopen qui ouvre le fichier et tester

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    FILE *handle=fopen("/etc/monprog.conf","r");
    if (handle==NULL)
    {
      fprintf(stderr,"Erreur ouverture fichier\n");
    }
    fclose(handle);
    Pour aller plus loin, tu peux aussi contrôler que l'erreur corresponde à fichier inexistant et pas à erreur de droits d'accès ou erreur d'I/O en récuperant la valeur de errno
    Vu que tu es sous Linux, tu peux aussi regarder au niveau de la fonction stat.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre averti
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2014
    Messages : 45
    Par défaut
    Quand j'éxécute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [root@vps01 ~]# gcc -o monprog monprog.c -pthread
    Pour le compiler, voici l'érreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    monprog.c: In function 'main':
    monprog.c:19: warning: passing argument 1 of 'fprintf' from incompatible pointe                                                                                                                     r type
    /usr/include/stdio.h:355: note: expected 'struct FILE * __restrict__' but argume                                                                                                                     nt is of type 'char *'
    monprog.c:19: error: too few arguments to function 'fprintf'
    monprog.c:21: warning: passing argument 1 of 'fprintf' from incompatible pointe                                                                                                                     r type
    /usr/include/stdio.h:355: note: expected 'struct FILE * __restrict__' but argume                                                                                                                     nt is of type 'char *'
    monprog.c:21: error: too few arguments to function 'fprintf'
    [root@vps01 ~]#

  4. #4
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Tu ne nous facilites pas la tâche en fournissant des messages d'erreurs tronqués et en ne nous montrant pas le code source que tu as tenté de compiler mais il semble que tu as oublié de mettre stderr comme premier paramètre de fprintf.

    PS: Il ne s'agit pas de C shell qui est un langage de script interprétés.

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 475
    Par défaut
    Bonsoir,

    Citation Envoyé par noam00 Voir le message
    Bonjour,
    J'aimerais savoir comment vérifier si un fichier existe en C shell
    Ton programme est en C, pas en C Shell.

    Citation Envoyé par chrtophe Voir le message
    Il te faut utiliser fopen qui ouvre le fichier et tester
    C'est une très mauvaise idée : http://www.developpez.net/forums/d64...e/#post3806352

    Vu que tu es sous Linux, tu peux aussi regarder au niveau de la fonction stat.
    Celle-ci est bien meilleure. :-)

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par noam00 Voir le message
    J'aimerais savoir comment vérifier si un fichier existe en C shell
    Bonjour

    Il ne faut pas confondre le C-shell (langage de script shell ayant un formalisme C) et le langage C. C'est comme confondre java et javascript. Ton code c'est du C, pas du C-shell.

    Pour ta question tu peux appeler access(nom_fichier, F_OK). Ca te renvoie 0 si le fichier existe...
    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]

  7. #7
    Membre averti
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2014
    Messages : 45
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (access("/ect/monprog.conf", F_OK))
        {
            fprintf(stderr,"Existe\n");
        }else{ 
    	    fprintf(stderr,"noExiste\n");
    	}
    quand je l’exécute sa écris existe même si le fichier n'existe pas..

  8. #8
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 256
    Par défaut
    Il te faut utiliser fopen qui ouvre le fichier et tester
    C'est une très mauvaise idée
    Pas forcément, car si il veut tester la présence du fichier , c'est probablement pour lire son contenu, il faudra donc bien l'ouvrir. Attention, l'exemple que j'ai fourni ouvre le fichier en lecture seule, il faudrait l'ouvrir en lecture/écriture si besoin de le modifier.

    cela n’empêche pas l'utilisation de stat, puis de procéder ensuite à l'ouverture du fichier par fopen, mais à moins d'avoir besoin d'infos supplémentaires retournées par stat, je ne vois pas l'intérêt.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 475
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Pas forcément, car si il veut tester la présence du fichier , c'est probablement pour lire son contenu, il faudra donc bien l'ouvrir. Attention, l'exemple que j'ai fourni ouvre le fichier en lecture seule, il faudrait l'ouvrir en lecture/écriture si besoin de le modifier.

    cela n’empêche pas l'utilisation de stat, puis de procéder ensuite à l'ouverture du fichier par fopen, mais à moins d'avoir besoin d'infos supplémentaires retournées par stat, je ne vois pas l'intérêt.
    Suis le lien indiqué. Il mène à un post où l'on a énuméré une bonne dizaine de raisons pour lesquelles ça peut poser problème, tant sur la forme que sur le fond. En plus, dans la page concernée, l'auteur voulait savoir si le fichier était vide, ici on veut réellement vérifier son existence. Certes, si l'étape suivante consiste réellement à ouvrir le fichier en question, alors il n'y a pas lieu de tester son existence du tout : il faut directement l'ouvrir — mais à cette fin —, pas pour vérifier sa présence. Il faut procéder ainsi non seulement pour éviter des opérations inutiles mais également pour laisser à la charge de l'utilisateur ce qui doit l'être : si l'utilisateur en question a envie de remplacer le fichier ciblé par un lien symbolique pour le rediriger quelque part, alors le programme n'a pas à intervenir sans raison valable et l'opération doit rester transparente.

    En revanche, il y a de nombreuses raisons qui peuvent amener un programme à vérifier en soi la présence d'un fichier, l'une des plus importantes étant d'éviter d'écraser ce qui existe éventuellement déjà, soit en choisissant son mode d'ouverture, soit en choisissant un autre nom de fichier (utile pour les dumps automatiques ou les téléchargements de fichiers).

    Enfin, comme exposé dans le post en question, il faut toujours garder à l'esprit qu'un filesystem ne réside pas forcément sur un disque dur : les périphériques lents se comportant comme des goulets d'étranglements ou les volumes réseau qui peuvent figer un système entier quand celui ne répond plus sont encore légion.

  10. #10
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par noam00 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (access("/ect/monprog.conf", F_OK))
        {
            fprintf(stderr,"Existe\n");
        }else{ 
    	    fprintf(stderr,"noExiste\n");
    	}
    quand je l’exécute ça écrit existe même si le fichier n'existe pas..
    As-tu lu tout ce que j'ai écrit ? Ca renvoie 0 quand le fichier existe !!!

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <stdio.h>
    #include <unistd.h>
    int main()
    {
    	char *file[]={"/etc/passwd", "/etc/group", "/etc/xxx", NULL};
    	char **f;
    	for (f=file; *f != NULL; f++)
    		printf("%s %s\n", *f, access(*f, F_OK) == 0 ?"existe" :"n'existe pas");
    }
    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]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. aides pour script en shell
    Par komatek dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 12/08/2003, 15h36
  2. [VB6] comment savoir si la commande shell est terminée ?
    Par ghyscharlotte dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/07/2003, 19h12
  3. Retour de requete postgresql / Shell Script
    Par doohan dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/06/2003, 18h07
  4. [SHELL] Icônes associées à des fichiers
    Par agh dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 09/04/2003, 17h04
  5. [Kylix] probleme pour lancer le shell
    Par miky dans le forum EDI
    Réponses: 5
    Dernier message: 13/08/2002, 09h39

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