Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

146
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda