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

Administration système Discussion :

[systeme fichier] repertoire execution


Sujet :

Administration système

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut [systeme fichier] repertoire execution
    Bonjour,

    JE cherche une manière de déterminer par programme si un repertoire est executable ou non En C ou C++ si possible, sinon j'essaierai de transformer...
    MErci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 129
    Points : 128
    Points
    128
    Par défaut
    salut

    pour cela il y a les appels système stat, lstat et fstat
    devrait te renseigner

  3. #3
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    un bout de code racourci autant que possible sur le modele d'un code fourni dans un de mes bouquins sur la programmation C sous unix :

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    /* a prendre par exemple
    ** car ca ne n'est qu'un referenciel
    ** des fonctions de droits sur les fichiers
    ** en tout cas coment tester les valeurs
    */
    #define _POSIX_C_SOURCE 1
    // tout programme n'a droit d'exister que si il respecte une des normes
    // en C les deux normes les plus courrantes sont ANSI-C et POSIX
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
     
    // les definitions :
    static int construire_modes(char * nom_du_fichier);
    static void traiter(int bit, char c1, char c2);
    // appeler une variable lettre+numero c'est pas bien !!!!!
    // utilises un vrai nom (minimum 3 lettres ) !!!!
    // sinon t'es un porc :-) comme moi
    static char modes[10]= {'\0',};
    static int indices_modes ; // qui comme son nom l'indique....
     
    int main(int argc, char *argv[])
    {
            int i ; // c'est pas bien comme nomage !!!!
            if (argc < 2 )
            {
                    fprintf(stderr,"\nusage : %s fichier\n",argv[0]);
                    exit(EXIT_FAILURE);
                    // gerer la stupiditee de l'utilisateur qui
                    // a oublier de mettre le parametre
            }
            for (i=1;i<argc;i++)
            {
                    //pour tout les fichiers en parametres autrement dit....
                    if (construire_modes(argv[i]))
                    {
                            // si la construction du message a retourner a l'utilisatuer est ok
                            printf("\n%s : %s\n",argv[i],modes);
                    }
            }
            return EXIT_SUCCESS;
            // je devrais normalement tester plus les hoses mais comme c'est juste pour l'exemple
            // je zappe
    }
     
    static int construire_modes(char *nom_du_fichier)
    {
            struct stat bufstat ; // un buffer quoi pour la structure stat du fichier
            mode_t mode ;
            if(stat(nom_du_fichier, &bufstat)==-1)
            {
                    // si le nom de fichier est errone par exemple
                    perror(nom_du_fichier);
                    return 0;
            }
            mode=bufstat.st_mode;
            indices_modes=0;
            traiter(mode & S_IRUSR, 'r', '-');
            traiter(mode & S_IRUSR, 'w', '-');
            if (mode & S_ISUID)
                    traiter(mode & S_IXUSR, 'S', 's');
            else
                    traiter(mode & S_IRUSR, 'x', '-');
            traiter(mode & S_IRGRP, 'r', '-');
            traiter(mode & S_IRGRP, 'w', '-');
            if (mode & S_ISGID)
                    traiter(mode & S_IXGRP, 'S', 's');
            else
                    traiter(mode & S_IRGRP, 'x', '-');
            traiter(mode & S_IROTH, 'r', '-');
            traiter(mode & S_IROTH, 'w', '-');
            traiter(mode & S_IROTH, 'x', '-');
            return 1;
            // je commente pas mais bon c'est clair comme ca
            // je remonte juste les baleurs user,group.other
    }
     
    static void traiter(int bit, char c1, char c2)
    {
            // fait la comparaison
            if (bit)
                    modes[indices_modes]=c1;
            else
                    modes[indices_modes]=c2;
            indices_modes++;
    }
    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
     
    TEST-FRSP:~/Documents/c # vi droits.c
    TEST-FRSP:~/Documents/c # gcc -Wall -O9 droits.c -o droits
    TEST-FRSP:~/Documents/c # ll && strip droits && ll
    total 16
    -rwxr-xr-x 1 root root 9893 Jul 10 18:03 droits
    -rw-r--r-- 1 root root 2445 Jul 10 18:03 droits.c
    total 12
    -rwxr-xr-x 1 root root 5904 Jul 10 18:03 droits
    -rw-r--r-- 1 root root 2445 Jul 10 18:03 droits.c
    TEST-FRSP:~/Documents/c # ./droits
     
    usage : ./droits fichier
    TEST-FRSP:~/Documents/c # ./droits droits.c droits
     
    droits.c : rwxrwxrwx
     
    droits : rwxrwxrwx
    TEST-FRSP:~/Documents/c #

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    hmm, je n'ai pensé qu'à fstat et compagnie qu'après Merci !
    De mon coté j'ai utilisé access, est-ce qu'une des solutions est meileure ?

Discussions similaires

  1. Recuperer le repertoire du fichier jar executé
    Par Clorish dans le forum Général Java
    Réponses: 9
    Dernier message: 01/04/2008, 14h09
  2. [Sécurité] accés fichier répertoire sécurisé
    Par wehtam dans le forum Langage
    Réponses: 3
    Dernier message: 13/04/2006, 17h56
  3. MFC : selection d'un fichier / repertoire
    Par firejocker dans le forum MFC
    Réponses: 4
    Dernier message: 07/04/2006, 16h53
  4. Inclusion/exclusion de fichiers/répertoires
    Par GLDavid dans le forum Linux
    Réponses: 17
    Dernier message: 10/11/2005, 16h17
  5. [System]Fichier INI
    Par Guybrush dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 30/08/2004, 14h29

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