Hello,
j'écris un programme pour linux en c++/gtkmm-2.4,
je voulais une fenetre un peu dans le style k3b ou gnomebaker pour afficher une arborescence de fichiers.
boost::filesystem ne marche pas sur mon pc alors j'ai trouvé des fonctions C telles que opendir() readdir() etc...
j'ai écris une fonction récursive pour lire le contenu du disk et ajouter les répertoires sur un Gtk::TreeStore...
ça marche bien si je prends le rép utilisateur comme racine de l'arborescence.
pour des réps tels que /dev /proc et /sys c la mouize, la fonction récursive boucle ces réps doivent contenir des raccourcis qui renvoient à chais pas quoi ...
si vous avez une idée pour que le prog puisse identifier le type de "fichier" (j'ai essayé stat() mais il me dit qu'un raccourci vers un rép est un rép donc ça m'avance pas trop lol)
merci d'avance pour toute réponse (et pour avoir lu ce post ;) )
# lstat
Posté par gaaaaaAab . Évalué à 2.
lstat is identical to stat, except in the case of a symbolic link,
where the link itself is stat-ed, not the file that it refers to.
[^] # Re: lstat
Posté par fieska . Évalué à 1.
#include <sys/stat.h>
#include <unistd.h>
#include
using namespace std;
int main()
{
struct stat info;
lstat("/home/fieska/b.run", &info);
int i = S_ISLNK(info.st_mode);
cout << i << endl;
return 0;
}
quelque soit le type de fichier que je passe en paramaètre dans lstat
(fichier normal, lien symbolique ou rép), la variable i à toujours la même valeur, à savoir 0 ...
[^] # Re: lstat
Posté par fieska . Évalué à 1.
ce qui donne :
/* Created by Anjuta version 1.2.3 */
/* This file will not be overwritten */
#include <sys/stat.h>
#include <unistd.h>
#include
using namespace std;
int main()
{
struct stat info;
lstat("/home/fieska/a", &info);
if (info.st_mode & S_IFLNK)
cout << "Lien" << endl;
return 0;
}
merci encore :)
[^] # Re: lstat
Posté par gaaaaaAab . Évalué à 2.
à moins que tu sois en POSIX.1-1996 (vu que le man dit que ça existe pas dans cette norme là), ça devrait marcher aussi chez toi ...
Le truc qui me plait pas trop dans ton prog de test, c'est le nom du fichier en dur.
Il suffit d'ajouter (int argc, char** argv) en paramètre de ton main et un argv[1] à la place du nom du fichier pour faire pleins de tests en étant sûr de pas s'emmeler les pinceaux dans la création de fichiers. Attention, argv[1], pas argv[0]. Je viens betement de perdre un quart d'heure là dessus :p
[^] # Re: lstat
Posté par fieska . Évalué à 1.
là ça marche pas, le code que j'ai envoyé renvoie systématiquement que c un lien ...
j'ai fais comme tu m'as dit pour passer le nom du fichier en argument.
par contre je ne sais pas où vérifier pour la norme posix, je suis sous debian testing.
merci pour tes conseils ;)
[^] # Re: lstat
Posté par fieska . Évalué à 1.
S_IFDIR et S_IFREG fonctionnent mais pas le S_IFLNK
qd je teste un lien pour savoir s'il est fichier ou rép il me répond soit fichier soit les deux ... lol
bref je ne sais pas trop comment détecter les liens symboliques du coup ...
encore merci
[^] # Re: lstat
Posté par fieska . Évalué à 1.
tout rentre dans l'ordre héhé merci encore pour tout :))) ça fonctionne nikel :))
[^] # Re: lstat
Posté par gaaaaaAab . Évalué à 2.
fais profiter ! fais profiter !
Il se passait quoi ? :)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.