Bonjour,
Comment en C peut t'on simplement connaitre les droits et le propriétaire d'un fichier, sans passer par une commande "system()".
Merci
Bonjour,
Comment en C peut t'on simplement connaitre les droits et le propriétaire d'un fichier, sans passer par une commande "system()".
Merci
Il n'y a rien de standard en C pour faire cela. En plus, cela va dépendre de l'OS, ou plutôt du système de fichiers. Si tu ne veux pas utiliser system(), il faut donc trouver une bibliothèque qui te permette de faire cela. Sous windows, l'API win32 offre peut-être de quoi faire.
Quid des fonctions chmod ou chown ?
Sur mes machines HP ou Linux, le code suivant fonctionne :
Si il existe une fonction C pour modifier les droits sur un fichier, on pourrais en avoir une pour les lire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include <stdio.h> int main (int argc,char * argv[]) { FILE *fic; char filename[200] = "test.txt"; fic = fopen(filename,"r"); if (fic == NULL) system("touch test.txt"); else fclose(fic); chmod (filename, 0777); }
Merci
Raymond
Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi
Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
e-verbe Un logiciel de conjugaison des verbes de la langue française.
Ma page personnelle sur DVP.
Non. Manque un header...
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 -------------- Build: Debug in hello --------------- [ 50.0%] Compiling: main.c [100.0%] Linking console executable: bin\Debug\hello.exe C:\dev\hello\main.c: In function `main': C:\dev\hello\main.c:10: warning: implicit declaration of function `system' C:\dev\hello\main.c:13: warning: implicit declaration of function `chmod' C:\dev\hello\main.c: At top level: C:\dev\hello\main.c:3: warning: unused parameter 'argc' C:\dev\hello\main.c:3: warning: unused parameter 'argv' C:\dev\hello\main.c: In function `main': C:\dev\hello\main.c:14: warning: control reaches end of non-void function Output size is 19.66 KB Process terminated with status 0 (0 minutes, 2 seconds) 0 errors, 5 warningsCe n'est pas une 'fonction C', mais une fonction système POSIX.1Si il existe une fonction C pour modifier les droits sur un fichier, on pourrais en avoir une pour les lire ?
http://www.opengroup.org/onlinepubs/...xsh/chmod.html
Pas de Wi-Fi à la maison : CPL
Merci de vos réponses.
De mon point de vue tout ce qui est "compris" par un compilateur C est du C !
la commande "man 2 chmod" sous HPUX (unix) ou Linux RedHat 4 m'indique bien la description d'une fonction C.
Alors, effectivement la commande stat() fournit bien les infos espérées.
Quant à la compilation qui ne marcherait pas, c'est assez curieux, car sur mes deux environnements cela est bon :
HPUX : cc test2.c -o test
Linux : gcc test2.c -o test
Aucune erreur, ni warning.
A bientôt
Avec cc et gcc, tu n'as pas de warnings si tu ne les demandes pas explicitement (je l'ai appris à mes dépens et ça m'a valu un 9/20 à un projet de fin d'année).
Commence par rajouter au moins -Wall...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Euh non, et ça montre surtout que tu ne sais pas faire la différence entre le langage C, sa bibliothèque et les bibliothèques externes (tierces, API etc.)
http://emmanuel-delahaye.developpez....m#c_vs_systeme
Euh non. Les fonctions C, c'est man 3. Man 2, c'est les fonctions systèmes... Là encore, il ne suffit pas de croire que... Il faut vérifier.la commande "man 2 chmod" sous HPUX (unix) ou Linux RedHat 4 m'indique bien la description d'une fonction C.
Oui, ce sont des environnements réputés POSIX.1, ce que n'est pas Windows.Quant à la compilation qui ne marcherait pas, c'est assez curieux, car sur mes deux environnements cela est bon :
HPUX : cc test2.c -o test
Linux : gcc test2.c -o test
Aucune erreur, ni warning.
Pas de Wi-Fi à la maison : CPL
OK pour mon abus de langage.
En tant que développeur C, j'utilise ce qui est à ma disposition et ne fait plus la part de ce qui est C natif ou bibliothèques externes en veillant toutefois à ne pas utiliser de fonctions "exotiques" qui risqueraient de ne pas être implémentées sur la majorité des OS.
Quant à la commande man, sur mes 2 environnements Unix et linux, le man chmod me renvoie cela :
man 2 chmod : me renvoie la description de la fonction que je prenais pour une fonction C
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 >20>: man chmod CHMOD(1) User Commands CHMOD(1) NAME chmod - change file access permissions SYNOPSIS chmod [OPTION]... MODE[,MODE]... FILE... chmod [OPTION]... OCTAL-MODE FILE... chmod [OPTION]... --reference=RFILE FILE... DESCRIPTION ...
man 3 chmod : ne me renvoie rien.
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 >21>: man 2 chmod CHMOD(2) Linux Programmer's Manual CHMOD(2) NAME chmod, fchmod - change permissions of a file SYNOPSIS #include <sys/types.h> #include <sys/stat.h> int chmod(const char *path, mode_t mode); int fchmod(int fildes, mode_t mode); DESCRIPTION ...
J'aimerais bien mais les indications fournies par la man ne dit pas explicitement si c'est du C, du système ou tel API et c'est bien dommage.Euh non. Les fonctions C, c'est man 3. Man 2, c'est les fonctions systèmes... Là encore, il ne suffit pas de croire que... Il faut vérifier.
A+
Déjà, le seul fait que ce soit man 2 et non man 3 doit suffire à signaler que ce n'est pas du C standard.
Ensuite, un champ "conforming to" est utile en effet.
J'ai ce man en favoris parce qu'il a un champ conformance, mais généralement j'utilise plutôt celui-ci : La Single UNIX Specification/norme POSIX, directement sur le site de l'Open Group.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Aucune magie. Il faut appendre à utiliser man :
man man
1 : commandes système (ligne de commande)
2 : fonctions systèmes (avec interface C)
3 : fonctions standard du C (libc)
etc.
http://fr.wikipedia.org/wiki/Man_(Unix)
Pas de Wi-Fi à la maison : CPL
Le "man man" ne me donne pas ces indications. Mais l'info donnée par Wikipédia est complète.
En plus, je pensais que "man" correspondait à "man 1", en fait "man" prends la première description trouvée parmi les réponses à "man 1", "man 2" ...
C'est pourquoi "man fopen" donne la description de la fonction C, comme "man 3", et que "man 1 fopen" et "man 3 fopen" ne donnent rien.
Cordialement
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager