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 stat
devuelto 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ó.