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 4 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 114.0.0.0 en Windows Windows NT

    This is a great inspiring article. I am pretty much pleased with your good work. You put really very helpful information. Ricky Bobby Racing Jacket

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

    Excellent article. The writing style which you have used in this article is very good and it made the article of better quality.
    Cyberpunk 2077 Jacket

  4. five nights at freddy's /
    Usando Google Chrome Google Chrome 115.0.0.0 en Windows Windows NT

    I appreciate your posting. I’ve read about a lot of related subjects! Contrary to other articles, yours left me with a really distinct impression. I hope you’ll keep writing insightful posts like this one and others for us to everyone to read!

Leave a Reply