/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

archivos Ext2

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
daiaa.



Registrado: 01 Feb 2013
Mensajes: 1

MensajePublicado: 01/02/2013 6:35 pm
Título: archivos Ext2

hola estoy hace 5 dias intentanto hacer este programa que no me sale..
tengo que detallar por salida estandar las entradas de directorios, indicando los inodos por cada entrada el nuemro de inodo, estuve haciendo este codigo que pogo mas abajo pero no me funciona.. nose como hacer y necesito ayuda por favor..

ESTE ES EL CODIGO

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>

int main( int argc, char *argv[] )
{
DIR *dir;
struct dirent *mi_dirent;

if( argc != 2 )
{
printf( "%s: %s directorio\n", argv[0], argv[0] );
exit( -1 );
}

if( (dir = opendir( argv[1] )) == NULL )
{
perror( "opendir" );
exit( -1 );
}

while( (mi_dirent = readdir( dir )) != NULL )
printf( "%s\n", mi_dirent->d_name );

closedir( dir );

return 0;
}

Y SE SUPONE QUE CUANDO LO EJECUTE CON UN DIRECTORIO ME QUEDARIA ASI

txipi@neon:~$ gcc dirs.c -o dirs
txipi@neon:~$ ./dirs
./dirs: ./dirs directorio
txipi@neon:~$ ./dirs .
.
..
files.c
files
stat.c
stat
makefile
clean
getcwd.c
getcwd
directorios.c
dirs.c
prueba
directorio2
dirs

PERO EN REALIDAD ME DICE QUE NO ES UN DIRECTORIO Sad
Volver arriba
daltomi



Registrado: 28 Abr 2007
Mensajes: 335
Ubicación: Argentina

MensajePublicado: 03/02/2013 8:42 pm
Título:

Buenas.

Debes utilizar la func. stat y la macro S_ISDIR para diferenciar entre un directorio o un archivo regular.
Puedes obtener el inode desde la estructura dirent->d_ino, o desde stat->st_ino

Ejemplo:
Código:

int main(int argc, char** argv )
{
   struct dirent* dir_entry;
   struct stat st;
   const string dir_name( argv[1] );

   DIR* directory = opendir( dir_name.c_str() );

   while( (dir_entry = readdir(directory) ) != NULL )
   {
      string stat_name( dir_name + dir_entry->d_name);

      stat( stat_name.c_str() , &st);
      
      if( S_ISDIR(st.st_mode) ) //es un directorio ?
      {
         cout << "Nombre: " << stat_name << " - inode: " << st.st_ino << endl;
      }
   }
   closedir(directory);
}


Observa el uso de otras funciones como lstat y las otras macros como S_ISREG, etc.
Para +info utiliza el buscador del sitio, con la palabra opendir, podrás ver otros ejemplos más elaborados.

Saludos.
Volver arriba
Dirección AIM
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com