Como obter o diretório atual em um programa C?
-
08-07-2019 - |
Pergunta
Eu estou fazendo um programa em C onde eu preciso para obter o diretório que o programa é iniciado a partir. Este programa é escrito para computadores UNIX. Eu estive olhando opendir()
e telldir()
, mas telldir()
retorna um off_t (long int)
, por isso realmente não me ajuda.
Como posso obter o caminho atual num (matriz de char) corda?
Solução
Você teve uma olhada getcwd()
?
#include <unistd.h>
char *getcwd(char *buf, size_t size);
Um exemplo simples:
#include <unistd.h>
#include <stdio.h>
#include <limits.h>
int main() {
char cwd[PATH_MAX];
if (getcwd(cwd, sizeof(cwd)) != NULL) {
printf("Current working dir: %s\n", cwd);
} else {
perror("getcwd() error");
return 1;
}
return 0;
}
Outras dicas
Procure a página de manual para getcwd
.
Embora a questão é marcado Unix, as pessoas também começa a visitá-lo quando sua plataforma de destino é o Windows, ea resposta para o Windows é o GetCurrentDirectory()
função:
DWORD WINAPI GetCurrentDirectory(
_In_ DWORD nBufferLength,
_Out_ LPTSTR lpBuffer
);
Estas respostas se aplicam ao código C e C ++.
Fazer a ligação sugerida por user4581301 em uma comentário a outra pergunta, e verificado como a escolha atual top com uma pesquisa no Google 'local :. microsoft.com GetCurrentDirectory'
#include <stdio.h> /* defines FILENAME_MAX */
//#define WINDOWS /* uncomment this line to use it for windows.*/
#ifdef WINDOWS
#include <direct.h>
#define GetCurrentDir _getcwd
#else
#include <unistd.h>
#define GetCurrentDir getcwd
#endif
int main(){
char buff[FILENAME_MAX];
GetCurrentDir( buff, FILENAME_MAX );
printf("Current working dir: %s\n", buff);
return 1;
}
Note que getcwd(3)
também está disponível em libc da Microsoft: getcwd (3) , e funciona da mesma maneira que você esperaria.
Deve ter um link com -loldnames
(OLDNAMES.LIB, que é feito automaticamente na maioria dos casos), ou o uso _getcwd()
. A versão unprefixed está indisponível no Windows RT.