Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

141
Vistas
Accediendo al directorio de inicio del usuario de Linux con fstream

Estoy escribiendo un pequeño código c ++ para acceder y editar cierto archivo de texto en el directorio de inicio del usuario. Actualmente tengo el siguiente código (esta es la parte relevante):

 bool core(void) { std::string autostart_entry = ""; std::string user_entry = ""; std::fstream username; username.open("username.txt", std::fstream::in); std::string location; std::string user_name; if (username.fail()) { username.open("username.txt", std::fstream::out); std::cout << "What's your system username? "; std::getline(std::cin, user_name); username << user_name; } else username >> user_name; username.close(); location = "/home/" + user_name + "/.config/openbox/autostart"; ... }

De esta manera, como puede ver, le pido al usuario su nombre de usuario y lo agrego a la cadena de ubicación, ¿hay alguna manera fácil de encontrar el directorio de inicio del usuario sin solicitar la entrada del usuario? He intentado "~/..." y no funciona.

Sé que podría escanear el archivo "/etc/passwd" para encontrarlo desde allí, pero me pregunto si hay otra forma.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Su mejor apuesta aquí es probablemente usar la función getenv:

 #include <stdlib.h> const char* homeDir = getenv("HOME");

La variable de entorno $HOME generalmente siempre se establece en Linux, y le devolverá una cadena al directorio de inicio de un usuario (incluso cuando no esté en /home)

EDITAR: Esto solo funcionará para el directorio de inicio del usuario que ejecuta el programa. Si desea el directorio de inicio para un usuario diferente, deberá utilizar otro enfoque

EDIT2: En realidad, pensando en esto por más de 1 segundo... lo anterior funcionará, y deberías usarlo primero. Sin embargo, si HOME no está configurado, puede usar getpwuid:

 #include <unistd.h> #include <sys/types.h> #include <pwd.h> const char *homedir = getenv("HOME"); if ( homedir == NULL ) { homedir = getpwuid(getuid())->pw_dir; }
over 4 years ago · Santiago Trujillo Denunciar

0

Si desea ir al directorio de inicio, simplemente use chdir("~")

demás,

Este es un truco sucio pero funciona.

 #include <unistd.h> char currdir[100]; char homedir[100]; getcwd(currdir); //store the current directory in currdir chdir("~"); // change the working directory to user's home directory getcwd(homedir); // get the full address chdir(currdir); // go back to the previous directory
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda