• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

alexvaz

C em Linux - Saber a HOME directory

5 mensagens neste tópico

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()???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora