Publi

Obtener el directorio personal del usuario (HOME) en C

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

También podría interesarte....

There are 3 comments left Ir a comentario

  1. Pingback: Cómo buscar un archivo en diferentes rutas en C++ – Poesía Binaria /

  2. Mike Rooney /
    Usando Google Chrome Google Chrome 118.0.0.0 en Windows Windows NT

    I found this post very exciting. I am also sending it to my friends to enjoy this blog. Walking Dead Negan Jacket

  3. Andrew Mark /
    Usando Google Chrome Google Chrome 118.0.0.0 en Windows Windows NT

    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

Leave a Reply