Jump to content

C em Linux - Saber a HOME directory


Recommended Posts

Posted

Boas! Eu estou a fazer um trabalho em C em linux em que uma das funções a desenvolver é a cd do linux:

cd mnt/flash, cd etc, e por aí fora.

Estou a utilizar a função chdir(), que está a funconar perfeitamente. Uma das caracteristicas do cd é que a execução "cd ~" altera a directoria para a directoria HOME do utilizador.

Neste caso, chdir("~") não funciona. Há alguma maneira de saber qual a HOME directory, passá-la para uma string e utilizar como argumento na função chdir()???

Posted

Para saber qual é a home pela consola normalmente é fazer:

$ cd

ele entra na home, e faz-se

$ pwd

e ele retorna algo como

/home/user/

Posted

Pegando no que o vbmaster disse, fazes:

system("pwd | tr "/" " "> ficheiro.txt");

No ficheiro.txt deve ficar tipo:

home user

Les o ficheiro e fazes de maneira a que leias o que está em user.

Mas isto nem sempre dá. Por exemplo se estiveres numa directoria acima da HOME...

EDIT: em vez de pwd faz echo $HOME

system(echo $HOME | tr "/" " " > ficheiro .txt);

O resto é igual.

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Posted

existem forma mais "correctas" para saber qual a directoria HOME....

uma delas a usar a função 'getenv' para obter o valor da variável '$HOME'. regra geral o valor dessa variável é o directório HOME, mas nada obriga a que assim seja por isso este método pode falhar (embora seja bastante improvável que isso aconteça).

a solução que certamente não vai falhar é ir buscar o directório da HOME ao ficheiro '/etc/passwd'.

isso pode ser feito da forma que se exemplifica de seguida:

#include <sys/types.h>
#include <unistd.h>
#include <pwd.h>

[...]

uid_t uid;
struct passwd *passwd;

uid = getuid();
passwd = getpwuid(uid);
char* home=strdup(passwd->pw_dir);
Posted

Ok, obrigado pelas respostas. Esqueci-me de dizer que é proibida a utilização da função system()... Vou testar a solução do Rui Carlos!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.