C fonction stat()

Fermé
Seiya0890 Messages postés 194 Date d'inscription samedi 3 juillet 2004 Statut Membre Dernière intervention 28 juin 2022 - Modifié par Seiya0890 le 30/09/2012 à 21:12
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 5 oct. 2012 à 22:36
Bonjour,


j'ai un problème avec le premier argument de la fonction stat(),
https://man7.org/linux/man-pages/man2/stat.2.html
il me semble qu'il devrait s'agir d'une chaîne de caractère.

voici un expemple d'utilisation:

struct stat sb;

if (argc != 2) {
fprintf(stderr, "Usage: %s <pathname>\n", argv[0]);
exit(EXIT_FAILURE);
}

if (stat(argv[1], &sb) == -1) {
perror("stat");
exit(EXIT_FAILURE);
}

printf("File type: ");

switch (sb.st_mode & S_IFMT) {
case S_IFBLK: printf("block device\n"); break;
case S_IFCHR: printf("character device\n"); break;
case S_IFDIR: printf("directory\n"); break;
case S_IFIFO: printf("FIFO/pipe\n"); break;
case S_IFLNK: printf("symlink\n"); break;
case S_IFREG: printf("regular file\n"); break;
case S_IFSOCK: printf("socket\n"); break;
default: printf("unknown?\n"); break;
}

mon but ici est d'afficher des informations sur un repertoire ou fichier (ici désigné par argv[1] ) . Jusque la ça marche bien, le probleme c'est que pour certaines raisons j'ai absolument besoin de remplacer

stat(argv[1], &sb) == -1)

par

stat(strcat(chaine,argv[1]), &sb) == -1) // ou chaine est une chaine de caractere

malheureusement le "strcat(chaine,argv[1])" ne prend pas, même strcat("./",argv[1]) ne marche pas T_T . Est ce que quelqu'un pourrait m'aider svp ?

A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 817
30 sept. 2012 à 21:58
Bonjour,
Quel est le message d'erreur ?
Comment est initialisé chaine ?
0
Seiya0890 Messages postés 194 Date d'inscription samedi 3 juillet 2004 Statut Membre Dernière intervention 28 juin 2022 12
1 oct. 2012 à 17:32
Bonsoir fiddy,

J'ai finalement trouvé la solution à mon problème c'est juste que j'avais initialiser chaine de cette maniere : char chaine[256], or il aurait fallu faire char *chaine, puis un malloc.

Merci quand même ^_^ .
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 817
1 oct. 2012 à 17:57
Que nenni !
Cela fonctionne très bien avec char chaine[256];
Encore faut-il initialiser chaîne à {0} pour que strcat fonctionne.
Ou alors tout simplement, utiliser strcpy( ou mieux strncpy).
0
Seiya0890 Messages postés 194 Date d'inscription samedi 3 juillet 2004 Statut Membre Dernière intervention 28 juin 2022 12
5 oct. 2012 à 19:31
j'ai essayer mais que ce soit avec strcat ou strcpy
j'avais a chaque fois un message d'erreur du genre cannot assign char[256] from char *
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 817
5 oct. 2012 à 22:36
Probablement car tu l'as mal fait.
Mais comme on a pas le code avec la nouvelle version. Je peux pas dire.
0