Précédent   Forum des professionnels en informatique > Systèmes > Linux > Système
Système Vos questions autour de l'administration système
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/07/2007, 10h23   #1
Membre actif
 
Homme
Inscription : septembre 2003
Messages : 457
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2003
Messages : 457
Points : 190
Points : 190
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
drKzs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 15h37   #2
Membre habitué
 
Inscription : décembre 2004
Messages : 129
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 129
Points : 102
Points : 102
salut

pour cela il y a les appels système stat, lstat et fstat
devrait te renseigner
Rhineauféros est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 18h06   #3
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
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 : 3 546
Points : 7 779
Points : 7 779
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 :
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 :
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 #
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2007, 22h26   #4
Membre actif
 
Homme
Inscription : septembre 2003
Messages : 457
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2003
Messages : 457
Points : 190
Points : 190
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 ?
drKzs est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h22.


 
 
 
 
Partenaires

Hébergement Web