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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top