Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Estructura stat en linux, ¿para que sirve, y como funciona?

Estas en el tema de Estructura stat en linux, ¿para que sirve, y como funciona? en el foro de C/C++ en Foros del Web. Muy buenas, estoy aqui intentando aprender algo de programacion c en linux, y me he encontrado con esta estructura. Para que sirve, y que funcionamiento ...
  #1 (permalink)  
Antiguo 09/05/2011, 09:02
Avatar de plantala  
Fecha de Ingreso: abril-2008
Ubicación: Jamaica
Mensajes: 176
Antigüedad: 16 años
Puntos: 1
Estructura stat en linux, ¿para que sirve, y como funciona?

Muy buenas,
estoy aqui intentando aprender algo de programacion c en linux, y me he encontrado con esta estructura.
Para que sirve, y que funcionamiento tiene?
Gracias de antemano por las respuestas.
Un saludo!
__________________
"Independizate de la esclavitud mental; tan solo nosotros mismos podemos liberar nuestra mente"-Bob Marley
  #2 (permalink)  
Antiguo 09/05/2011, 10:28
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Estructura stat en linux, ¿para que sirve, y como funciona?

Por lo que acabo de leer stat tiene informacion sobre un archivo. Esta informacion se obtiene usando la funcion stat.

int stat(const char *nomb_arch, struct stat *buf) -- obtiene información acerca del archivo apuntado por nomb_arch. No se requieren permisos de lectura, escritura o ejecución, pero todos los directorios listados en nomb_arch deberán estar disponibles.

Código C:
Ver original
  1. struct stat
  2. {
  3.     dev_t         st_dev;      /* dispositivo */
  4.     ino_t         st_ino;      /* inodo */
  5.     mode_t        st_mode;     /* proteccion */
  6.     nlink_t       st_nlink;    /* numero de enlaces fisicos */
  7.     uid_t         st_uid;      /* ID del usuario propietario */
  8.     gid_t         st_gid;      /* ID del grupo propietario */
  9.     dev_t         st_rdev;     /* tipo dispositivo (si es
  10.                                   dispositivo inodo) */
  11.     off_t         st_size;     /* tamaño total, en bytes */
  12.     unsigned long st_blksize;  /* tamaño de bloque para el
  13.                                   sistema de ficheros de E/S */
  14.     unsigned long st_blocks;   /* numero de bloques asignados */
  15.     time_t        st_atime;    /* hora ultimo acceso */
  16.     time_t        st_mtime;    /* hora ultima modificacion */
  17.     time_t        st_ctime;    /* hora ultimo cambio */
  18. };

Al usar esa funcion obtienes esos datos sobre un archivo...
  #3 (permalink)  
Antiguo 09/05/2011, 12:40
Avatar de plantala  
Fecha de Ingreso: abril-2008
Ubicación: Jamaica
Mensajes: 176
Antigüedad: 16 años
Puntos: 1
Respuesta: Estructura stat en linux, ¿para que sirve, y como funciona?

Buenas, muchas gracias por la ayuda sam90, ahora tengo otra pequeña duda. Viendo algun programa, veo que se utizilan argc y argv[]. Segun he podido entender, argc te dice cuantos argumentos tiene el fichero, y el argv[] te dice cual es cada argumento... Pero no lo entiendo del todo, por ejemplo:
Tengo un archivo con el nombre "ejemplo.txt", como me aparecen su informacion?
Es decir, por ejemplo, si me da la informacion de su tamaño, como me aparece representado? ejemplo.txt 512 ?
En este caso, seria argc=2 , argv[1]=ejemplo.txt y argv[2]=512 ?


Por otro lado, he encontrado un programa, y no entiendo muy bien su funcionamiento:

[I]#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define TAMANO 512
void report( char * name, struct stat * buffer)
{
printf("%s:",name);
printf( "i-nodo: %d\t", buffer->st_ino );
printf( "size: %ld\n", buffer->st_size );
}

int main( int argc, char *argv[] )
{
struct stat estructura;
if (argc < 2) Que hace este if ? escribe como segundo argumento
{ del archivo un error? Cual es el error?
char buff[]="Error de (1)";
write(2,buff, sizeof(buff));
exit(-1);
}
int i=1;
while(i<argc)
{
if( stat( argv[i], &estructura ) < 0 ){ Que es lo que compara este if ?
perror( "(2)" );
exit(-1);
}
else
report(argv, &estructura); Cual es el significado de report ?
i++;
}
return 0;
}


Bueno, ya se que son bastantes dudas, soy bastante novato en esto, pero agradeceria cualquier pequeña ayuda.
Gracias de nuevo.
Un saludo!
__________________
"Independizate de la esclavitud mental; tan solo nosotros mismos podemos liberar nuestra mente"-Bob Marley
  #4 (permalink)  
Antiguo 09/05/2011, 13:09
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Estructura stat en linux, ¿para que sirve, y como funciona?

argc argv[] se utilizan para ver los argumentos con los cual se invocado el programa. Por ejemplo compilamos mi programa con el siguiente nombre mirpograma.exe

Si lo ejecutamos de la siguiente forma:
miprograma.exe "hola mundo" 19 12

La variable argc va a ser igual a 3 y la variable argv = {"miprograma.exe","hola mundo", "19", "12"}

Tener en cuenta que como primer argumento viene el nombre con el cual se invoco al programa.

En tu codigo que pasas la idea es ejecutarel programa con nombres de fichero como argumentos.
Entonces despues ejecuta la funcion stat para cada fichero y te devuelve info de la estructura.
  #5 (permalink)  
Antiguo 09/05/2011, 13:18
Avatar de plantala  
Fecha de Ingreso: abril-2008
Ubicación: Jamaica
Mensajes: 176
Antigüedad: 16 años
Puntos: 1
Respuesta: Estructura stat en linux, ¿para que sirve, y como funciona?

Gracias de nuevo, en serio, me estas siendo de gran ayuda.
Creo que ya lo estoy entendiendo, pero me podrias aclarar cada una de las tres dudas que he puesto en el programa en negrita?
Un saludo!
__________________
"Independizate de la esclavitud mental; tan solo nosotros mismos podemos liberar nuestra mente"-Bob Marley
  #6 (permalink)  
Antiguo 09/05/2011, 14:12
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Estructura stat en linux, ¿para que sirve, y como funciona?

El primer If chequea que se alla invocado el programa con algun parametro...osea con algun archivo. algo asi

miprograma.exe archivo.txt archivo2.eee ....

lo compara con menor a dos porque como convension vienen el nombre como se invoco el programa como primer parametro. Osea como minimo tiene que haber dos argumentos.

El segundo if compara si la funcion stat devuelve algun error. En c/c++ se pueden calcular funciones dentro de un if y comparar directamente su resultado dentro del if. en este caso se ejecuta la funcion stat rellena el campo estructura y devuelve un numero. Si este es menor a cero entonces hubo un error.

Lo ultimo, lo unico que hace es llamar una funcion que esta definida mas arriba del main.

Te recomiendo que empiece por algo mas basico porque las dudas que estas haciendo son bastante basicas para el pedazo de codigo que estas analisando.

Etiquetas: estructura, linux, stat
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:58.