[ENOTDIR] A component of the path prefix is not a directory.
[ENAMETOOLONG] A component of a pathname exceeded {NAME_MAX} charac-
ters, or an entire path name exceeded {PATH_MAX} char-
acters.
[ENOENT] The named file does not exist.
[EACCES] Search permission is denied for a component of the
path prefix.
[ELOOP] Too many symbolic links were encountered in translat-
ing the pathname.
[EFAULT] sb or name points to an invalid address.
[ENXIO] The named file is a character special or block special
file, and the device associated with this special file
does not exist.
[EIO] An I/O error occurred while reading from or writing to
the file system.
[EBADF] A badly formed v-node was encountered. This can hap-
pen if a file system information node is incorrect.
Je pense pas que mon script soit sujet a une de ses erreurs, mais j'avou ne pas tres bien comprendre le man en sa totalite ^^
Maintenant que je verfie stat j'ai toujours ce probleme d'erreur, seulement chose bizard, si j'inhibe le exit(-1) il maffiche bien le printf("Erreur"); mais me donne bien le nom des fichiers donc j'avou ne pas bien comprendre.
Une question:
Est ce que a chaque fois que j'qppel stat la structure se vide bien et peut etre remplacer par les nouvelles donnees ? peut-etre devraige faire un malloc ou un truc du genre et le free a chaque fois ? ou bien je m'egare ?
Nop sa m'nrv de chercher mais je veux aussi trouver par moi meme ! je sais c'est assez complexe c'est toujours plus sympas de se dire qu'on a pas eu tout macher dans la bouche mais quelque fois je suis perdu je veux etre sur d'etre dans la bonne direction, voila tout :D
En tout cas merci de ton aide :)
Je viendrai souvent ici vous dire si sa avance ... ou pas Je vais me pencher sur stat qui a en effet beaucoup de probleme apres verification .
Non ba ca a pas l'air de marcher, puis maintenant que je verifie le retour de stats il me lache une jolie erreur apres avoir lu dans le dossier le fichier
.
..
Donc il me dit bien a qui appartient . (Quoi que jsuis pas sur qu'il m'appartienne) et .. mais apres les autres fichiers nada ya une erreur.
Apres verification, si ils m'appartiennent
drwxr-xr-x 3 mon_login rendu 512 Nov 30 03:22 .
drwx------ 4 mon_login rendu 512 Nov 30 11:32 ..
-rw-r--r-- 1 mon_login rendu 4 Nov 29 17:07 c
-rw-r--r-- 1 mon_login rendu 5 Nov 29 17:07 d
-rw-r--r-- 1 mon_login rendu 3 Nov 29 17:07 l
drwxr-xr-x 2 mon_login rendu 512 Nov 29 11:48 tmp
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <grp.h>
#include <pwd.h>
#include <sys/dir.h>
#include <dirent.h>
void read_folder(DIR *dir)
{
#define S_ISUID 0004000 /* set user id on execution */
#define S_ISGID 0002000 /* set group id on execution */
struct dirent *d;
struct stat stats;
struct group *g;
struct passwd *pwd;
while (d = readdir(dir))
{
if (stat(d->d_name, &stats) != 0)
{
printf("%d", stat(d->d_name, &stats));
printf ("erreur\n");
exit (-1);
}
g = getgrgid(stats.st_gid);
pwd = getpwuid(stats.st_uid);
printf("~~ Variables de stat sur %s ~~ \n\n", d->d_name);
printf("-Peripherique: %d\n", stats.st_dev);
printf("-Numero I-Noeud: %d\n", stats.st_ino);
printf("-Modes: %o\n", stats.st_mode);
printf("-Nb Liens materiels: %d\n", stats.st_nlink);
printf("-UID: %s\n", pwd->pw_name);
printf("-GID: %s\n\n", g->gr_name);
}
}
int main(int argc, char **argv)
{
static DIR *dir;
if (argc != 2)
{
printf("Comment on m'utilise ?\n%s dossier", argv[0]);
exit(1);
}
if ((dir = opendir(argv[1])) == NULL)
{
printf("Probleme avec Opendir.");
exit(1);
}
read_folder(dir);
closedir(dir);
}
Le bit Set-GID (S_ISGID) a plusieurs utilisations particulières : pour un répertoire, il indique que la sémantique BSD doit être appliquée en son sein, c'est-à-dire que les fichiers qui y sont créés héritent leur GID du répertoire et non pas du GID effectif du processus créateur, et les sous-répertoires auront automatiquement le bit S_ISGID actif. Pour les fichiers qui n'ont pas d'autorisation d'exécution pour le groupe (S_IXGRP non actif), ce bit indique qu'un verrouillage strict est en vigueur sur ce fichier.
??
sinon je vois pas trop c'est la premiere fois pour moi que j'utilise ces fonctions, je dois recoder un ls disons que pour l'instant ca va a peu pres mais que ce ptit bug au niveau des repertoires me fait un peu **** ^^ :)
[^] # Re: Et sans getgr[ug]id ?
Posté par geozzz . En réponse au message Un probleme sur mon code. Évalué à 1.
[^] # Re: Et sans getgr[ug]id ?
Posté par geozzz . En réponse au message Un probleme sur mon code. Évalué à 1.
MERCI BEAUCOUP :D
[^] # Re: Et sans getgr[ug]id ?
Posté par geozzz . En réponse au message Un probleme sur mon code. Évalué à 1.
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
void aff_info(char *file, struct stat buf)
{
struct group *g;
struct passwd *pwd;
if (stat(file, &buf) != 0)
{
printf("%d", stat(file, &buf));
printf ("erreur %s\n", strerror(errno));
exit(-1);
}
g = getgrgid(buf.st_gid);
pwd = getpwuid(buf.st_uid);
printf("~~ Variables de stat sur %s ~~ \n\n", file);
printf("-Peripherique: %d\n", buf.st_dev);
printf("-Numero I-Noeud: %d\n", buf.st_ino);
printf("-Modes: %o\n", buf.st_mode);
printf("-Nb Liens materiels: %d\n", buf.st_nlink);
printf("-UID: %s\n", pwd->pw_name);
printf("-GID: %s\n\n", g->gr_name);
return ;
}
void read_folder(DIR *dir)
{
struct dirent *d;
struct stat buf;
while (d = readdir(dir))
{
aff_info(d->d_name, buf);
}
}
int main(int argc, char **argv)
{
DIR *dir;
if (argc != 2)
{
printf("Comment on m'utilise ?\n%s dossier", argv[0]);
exit(1);
}
if ((dir = opendir(argv[1])) == NULL)
{
printf("Probleme avec Opendir.");
exit(1);
}
read_folder(dir);
closedir(dir);
}
[^] # Re: Et sans getgr[ug]id ?
Posté par geozzz . En réponse au message Un probleme sur mon code. Évalué à 1.
did not exist, or the pathname was an empty string.
Retour de ma fonction :
Erreur : 2 (errno)
Je ne comprend pas pourtant les fichiers existent bien ? faut-il le pathname en entier depuis la racine ?
Bon je suis sur que je suis a l'ouest ! la reponse :D ^^
[^] # Re: Et sans getgr[ug]id ?
Posté par geozzz . En réponse au message Un probleme sur mon code. Évalué à 1.
stat() and lstat() will fail if:
[ENOTDIR] A component of the path prefix is not a directory.
[ENAMETOOLONG] A component of a pathname exceeded {NAME_MAX} charac-
ters, or an entire path name exceeded {PATH_MAX} char-
acters.
[ENOENT] The named file does not exist.
[EACCES] Search permission is denied for a component of the
path prefix.
[ELOOP] Too many symbolic links were encountered in translat-
ing the pathname.
[EFAULT] sb or name points to an invalid address.
[ENXIO] The named file is a character special or block special
file, and the device associated with this special file
does not exist.
[EIO] An I/O error occurred while reading from or writing to
the file system.
[EBADF] A badly formed v-node was encountered. This can hap-
pen if a file system information node is incorrect.
Je pense pas que mon script soit sujet a une de ses erreurs, mais j'avou ne pas tres bien comprendre le man en sa totalite ^^
Maintenant que je verfie stat j'ai toujours ce probleme d'erreur, seulement chose bizard, si j'inhibe le exit(-1) il maffiche bien le printf("Erreur"); mais me donne bien le nom des fichiers donc j'avou ne pas bien comprendre.
Une question:
Est ce que a chaque fois que j'qppel stat la structure se vide bien et peut etre remplacer par les nouvelles donnees ? peut-etre devraige faire un malloc ou un truc du genre et le free a chaque fois ? ou bien je m'egare ?
[^] # Re: Et sans getgr[ug]id ?
Posté par geozzz . En réponse au message Un probleme sur mon code. Évalué à 1.
[^] # Re: J'ai peut etre trouver
Posté par geozzz . En réponse au message Un probleme sur mon code. Évalué à 2.
En tout cas merci de ton aide :)
Je viendrai souvent ici vous dire si sa avance ... ou pas Je vais me pencher sur stat qui a en effet beaucoup de probleme apres verification .
[^] # Re: Et sans getgr[ug]id ?
Posté par geozzz . En réponse au message Un probleme sur mon code. Évalué à 1.
#include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <unistd.h> #include <grp.h> #include <pwd.h> #include <sys/dir.h> #include <dirent.h> void read_folder(DIR *dir) { #define S_ISUID 0004000 /* set user id on execution */ #define S_ISGID 0002000 /* set group id on execution */ struct dirent *d; struct stat stats; struct group *g; struct passwd *pwd; while (d = readdir(dir)) { if (stat(d->d_name, &stats) != 0) { printf("%d", stat(d->d_name, &stats)); printf ("erreur\n"); exit (-1); } g = getgrgid(stats.st_gid); pwd = getpwuid(stats.st_uid); printf("~~ Variables de stat sur %s ~~ \n\n", d->d_name); printf("-Peripherique: %d\n", stats.st_dev); printf("-Numero I-Noeud: %d\n", stats.st_ino); printf("-Modes: %o\n", stats.st_mode); printf("-Nb Liens materiels: %d\n", stats.st_nlink); printf("-UID: %s\n", pwd->pw_name); printf("-GID: %s\n\n", g->gr_name); } } int main(int argc, char **argv) { static DIR *dir; if (argc != 2) { printf("Comment on m'utilise ?\n%s dossier", argv[0]); exit(1); } if ((dir = opendir(argv[1])) == NULL) { printf("Probleme avec Opendir."); exit(1); } read_folder(dir); closedir(dir); }
# J'ai peut etre trouver
Posté par geozzz . En réponse au message Un probleme sur mon code. Évalué à 2.
Le bit Set-GID (S_ISGID) a plusieurs utilisations particulières : pour un répertoire, il indique que la sémantique BSD doit être appliquée en son sein, c'est-à-dire que les fichiers qui y sont créés héritent leur GID du répertoire et non pas du GID effectif du processus créateur, et les sous-répertoires auront automatiquement le bit S_ISGID actif. Pour les fichiers qui n'ont pas d'autorisation d'exécution pour le groupe (S_IXGRP non actif), ce bit indique qu'un verrouillage strict est en vigueur sur ce fichier.
??
sinon je vois pas trop c'est la premiere fois pour moi que j'utilise ces fonctions, je dois recoder un ls disons que pour l'instant ca va a peu pres mais que ce ptit bug au niveau des repertoires me fait un peu **** ^^ :)