alexvaz Posted December 1, 2006 at 03:39 PM Report #68115 Posted December 1, 2006 at 03:39 PM 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()???
vbmaster Posted December 1, 2006 at 03:45 PM Report #68116 Posted December 1, 2006 at 03:45 PM 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/
Hipnoted Posted December 1, 2006 at 03:55 PM Report #68117 Posted December 1, 2006 at 03:55 PM 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"
Rui Carlos Posted December 1, 2006 at 04:17 PM Report #68126 Posted December 1, 2006 at 04:17 PM 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); Rui Carlos Gonçalves
alexvaz Posted December 1, 2006 at 08:21 PM Author Report #68192 Posted December 1, 2006 at 08:21 PM 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!
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now