[C con Clase] Error glibc y escaneo de directorios.
Sergio
sbgaster en gmail.com
Sab Ene 23 13:13:26 CET 2010
Hola a todos, envió esta consulta a esta lista aun sabiendo que no es una
pregunta referente a C++ ya que me tiene bastante loco y no consigo
encontrar el error.
Estoy haciendo unas pruebas con glibc-2.0 y bueno me puse a hacer un pequeño
programa para escanear un directorio, sin pretensiones, solo unas pruebas.
El caso es que una vez acabado el programa puedo escanear mi directorio
/home pero si introduzco cualquier otro directorio por ejemplo /usr no me
imprime nada , como digo es un programa de prueba y solo escanea el primer
directorio , no entra en los demás.
Aquí envió el código a ver si alguien me puede decir cual es el error.
#include <glib.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main ( int argc ,char *argv[] )
{
//variables
GDir *dir = NULL;
GDir *new_dir = NULL;
gchar *name_dir = NULL;
gchar *name_sub_dir = NULL;
GError *error = NULL;
gchar *path = NULL;
//comprobar argumentos
if (argc < 2 )
{
printf ( "Usaje:\nNombre del programa lib_1 " );
printf ( "seguido del argumento ( directorio a escanear ).\n" );
return;
}
path = ( gchar * ) malloc ( sizeof ( argv ) );
strcpy ( path ,argv[1] );
//abrir directorio y comprobar errores
dir = g_dir_open ( path, 0, &error );
if ( error )
{
printf ( "%s", error->message );
g_clear_error ( &error );
return -1;
}
//mientras name_dir contenga algun valor
do
{
name_dir = g_dir_read_name ( dir );
if ( g_file_test ( name_dir, G_FILE_TEST_IS_DIR ) )
{
printf ( "%s\n", name_dir );
new_dir = g_dir_open ( name_dir, 0, &error );
if ( error )
{
printf ( "%s", error->message );
g_clear_error ( &error );
return -1;
}
//mientras name_sub_dir contenga algun valor
do
{
name_sub_dir = g_dir_read_name ( new_dir );
if ( g_file_test ( name_sub_dir, G_FILE_TEST_IS_DIR ) ||
name_sub_dir != NULL )
{
printf ( "\t%s\n", name_sub_dir );
}
}while ( name_sub_dir );
}
} while ( name_dir );
free ( path );
return 0;
}
Como digo si arranco el programa con:
$./lib_1 /home/sergio
me muestra los directorios que hay incluidos los ocultos y los archivos pero
si le pongo:
$./lib_1 /usr
no muestra nada , debugeando veo que la variable path recoge bien el valor
pero que en la linea if ( g_file_test ( name_dir, G_FILE_TEST_IS_DIR ) )
no devuelve true nunca aunque la variable name_dir contenga un directorio y
eso es lo que no entiendo porque con /home/sergio si funciona y porque con
/usr no.
Por cierto utilizo linux para compilar:
gcc -g `pkg-config --cflags --libs glib-2.0` lib_1.c -o lib_1
Pues nada mas si alguien me explica el error lo agradecería mucho.
Saludos.
PD. Magnifica lista por cierto.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100123/61d94612/attachment.html>
Más información sobre la lista de distribución Cconclase