Newsgroup: it.comp.os.linux.development
Titolo: d_type di una scandir

Ciao a tutti!
mi date una mano?
Mini problema in C:
--------
#include <gtk/gtk.h>
#include <sys/stat.h>
#include <string.h>
#include <dirent.h>
int
main (int argc, char *argv[])
{
	gchar *directory;
	int n_file_dir;
	struct dirent **namelist;
 
	 n_file_dir = scandir (directory, &namelist, NULL, alphasort);
 
	while(n_file_dir--) 
	g_print ("%i	 %s \n", n_file_dir, namelist[n_file_dir]->d_type);
  return 0;
}
---------
è normale che lanciato restituisca:
5        (null) 
4        (null) 
3        (null) 
2        (null) 
1        (null) 
0        (null) 
??
perchè non mi dice "DT_DIR" o altro?
da manuale glibc vedo:
unsigned char d_type
    This is the type of the file, possibly unknown. The following
    constants are defined for its value:
    DT_UNKNOWN
    The type is unknown. On some systems this is the only value
    returned.
 
e allora io sono su un "some systems" ?
posso fare qualcosa?
grazie&ciao!
-- 
ciao
Linux hobbes 2.4.7

 n_file_dir = scandir (directory, &namelist, NULL, alphasort);
scusa, ma in che directory stai andando a cercare? non hai mai 
inizializzato directory. Direi che e' tanto che il tuo codice compili e 
funzioni...
-- 
Se l'appetito vien mangiando,
Figuriamoci a digiuno...
BW2K+2

 	 n_file_dir = scandir (directory, &namelist, NULL, alphasort);
Che cosa contiene `directory'?
Perche', cosi` com'e`, e` == NULL.
Bye,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)           [ 
http://www.radiance.d2g.com/~zefram
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 Perche', cosi` com'e`, e` == NULL.
gchar * e' speciale?
non dovrebbe contenere spazzatura?

 non dovrebbe contenere spazzatura?
Ho controllato: e` identico a char, quindi non dovrebbe contenre nulla
(e non NULL).


 Perche', cosi` com'e`, e` == NULL.
:)
scusate... ma ho tagliato un pezzo di codice di troppo, eccolo qua:
gchar *directory;
getcwd (directory) ;
non è directory il problema...
insomma io dovrei avere una lista con solo le directory, senza i file;
ho provato a farlo lavorando sul terzo parametro di scandir: 
int (*selector) (const struct dirent *).
Per esempio:
...
n_file_dir = scandir (directory, &namelist, selector, alphasort);
...
ma alla mia funzione selector arriva un const struct dirent * senza il
path assoluto del file! (mi pare di aver capito)
quindi se per esempio sono in /boot e tento di fare uno scandir di /home, viene
cercato un file chiamato /home/vmlinuz-2.4.7 ... che non esiste: quindi
il selettore va a pallino! (Segmentation fault)
Quindi, ho 2 domande
1) è possibile alterare il terzo parametro di scandir, che so, tipo:
n_file_dir = scandir (directory, &namelist, selector(mioparametro), alphasort);
così posso passare un mio paramtro assieme a quello che passa già lui.. 
??
domanda che non c'entra:
2) come %&$% si fa a leggere i parametri passati da un mio alphasort
personale?
tipo:
int (*mioalphasort) () = &sort ;
n_file_dir = scandir (directory, &namelist, NULL, mioalphasort);
e:
int sort (struct dirent *file1, struct dirent *file2)
{
	g_print(?????);
	//voglio il nome del file!!!
	//perche' g_print ("%s \n", file1->d_name); non funziona ?!!
	//:(
}
grazie mille!


 personale?
...
Perche' sbagli candeggio. Il prototipo del sort che ti serve deve essere
int trallallero(const struct dirent **a, const struct dirent **b);
per andar bene a scandir.
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! 3rd Law of Computing: Anything that can go wr
		fortune: Segmentation violation -- Core dumped !>-