Saltar al contenido

Usando Struct Stat()

Te damos la bienvenida a nuestra comunidad, en este sitio vas a hallar la resolución que necesitas.

Solución:

Sí, buf se está utilizando aquí como un parámetro de salida. Los resultados se almacenan en buf y el valor de retorno de stat es un código de error que indica si el stat operación exitosa o fallida.

Se hace así porque stat es una función POSIX, diseñada para C, que no admite mecanismos de informe de errores fuera de banda como excepciones. Si statdevuelto una estructura, entonces no tendría forma de indicar errores. El uso de este método de parámetro externo también permite a la persona que llama elegir dónde desea almacenar los resultados, pero esa es una característica secundaria. Está perfectamente bien pasar la dirección de una variable local normal, tal como lo ha hecho aquí.

Accede a los campos de una estructura como lo haría con cualquier otro objeto. ¿Supongo que al menos está familiarizado con la notación de objetos? Por ejemplo, el st_dev campo dentro de la stat estructura llamada buf se accede por buf.st_dev. Asi que:

cout << buf.st_dev << endl;

etc.

Para otro proyecto, preparé una pequeña función que hace algo similar a lo que necesitas. Echa un vistazo a sprintstatf.

He aquí un ejemplo de uso:

#include 
#include 
#include 

#include "sprintstatf.h"

int
main(int argc, char *argv[])

    char *outbuf = (char *)malloc(2048 * sizeof(char));
    struct stat stbuf;
    char *fmt = 
        "st_atime (decimal) = "%a"n"
        "st_atime (string)  = "%A"n"
        "st_ctime (decimal) = "%c"n"
        "st_ctime (string)  = "%C"n"
        "st_gid   (decimal) = "%g"n"
        "st_gid   (string)  = "%G"n"
        "st_ino             = "%i"n"
        "st_mtime (decimal) = "%m"n"
        "st_mtime (string)  = "%M"n"
        "st_nlink           = "%n"n"
        "st_mode  (octal)   = "%p"n"
        "st_mode  (string)  = "%P"n"
        "st_size            = "%s"n"
        "st_uid             = "%u"n"
        "st_uid             = "%U"n";

    lstat(argv[1], &stbuf);

    sprintstatf(outbuf, fmt, &stbuf);
    printf("%s", outbuf);

    free(outbuf);
    exit(EXIT_SUCCESS);


/* EOF */

Esta pregunta puede ser demasiado antigua para comentar, pero estoy publicando esto como referencia

Para obtener una buena comprensión de la función stat (), la razón para pasar la referencia de estadísticas y, lo que es más importante, el manejo de errores se explica bien en el siguiente enlace

stat - obtener el estado del archivo

Nos encantaría que puedieras dar difusión a esta noticia si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *