Muchas veces, en nuestros programas, es necesario conocer el directorio personal del usuario actual, para leer o escribir archivos, aquí traigo una función muy pequeña que hace este trabajo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <pwd.h> char *getHomeDir() { static char *home = NULL; if (!home) { home = getenv("HOME") ; } if (!home) { struct passwd *pw = getpwuid(getuid()); if (pw) home = pw->pw_dir ; } return home; } int main(int argc, char *argv[]) { printf ("HOME: %s\n", getHomeDir()); return EXIT_SUCCESS; } |
Y con este ejemplo vemos que todo funciona bien.
Si miramos, en la función getHomeDir(), el directorio se almacena en una variable estática, ya que no vamos a liberar la memoria de esta cadena, al menos, no estamos obteniendo de nuevo el directorio cada vez que llamamos a la función, sino que una vez obtenido el valor, devolvemos la referencia de la variable estática.
Por otro lado, tenemos dos modos de obtener el PATH, el primero es con la variable de entorno HOME, esto está muy bien, muchas veces está definida, y podemos acudir a ella; aunque si no está ahí, nos traemos la información del archivo /etc/passwd, aunque tiene mucha más información que no nos interesa ahora mismo (podéis mirar el manual de getpwuid() para ver todo lo que nos traemos, y no os hagáis ilusiones con el password de los usuarios, ya no se almacena en passwd y seguramente si encontráis un sistema con las claves ahí, será un hash lo que veamos).
Foto: Neetesh Gupta (Flickr) CC-by a 23-08-2013
Pingback: Cómo buscar un archivo en diferentes rutas en C++ – Poesía Binaria /
I found this post very exciting. I am also sending it to my friends to enjoy this blog. Walking Dead Negan Jacket
This is the one of the most important information for me. And I am feeling glad reading your article. The article is really excellent?
Top Gun Bomber Jacket