Pregunta

Estoy haciendo un programa en C donde necesito obtener el directorio desde el que se inicia el programa. Este programa está escrito para computadoras UNIX. He estado mirando opendir () y telldir () , pero telldir () devuelve un off_t (long int) , por lo que realmente no me ayuda.

¿Cómo puedo obtener la ruta actual en una cadena (matriz de caracteres)?

¿Fue útil?

Solución

¿Ha echado un vistazo a getcwd () ?

#include <unistd.h>
char *getcwd(char *buf, size_t size);

Ejemplo simple:

#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;
}

Otros consejos

Busque la página de manual para getcwd .

Aunque la pregunta está etiquetada como Unix, las personas también pueden visitarla cuando su plataforma de destino es Windows, y la respuesta para Windows es GetCurrentDirectory () función:

DWORD WINAPI GetCurrentDirectory(
  _In_  DWORD  nBufferLength,
  _Out_ LPTSTR lpBuffer
);

Estas respuestas se aplican a los códigos C y C ++.

Enlace sugerido por user4581301 en un comment a otra pregunta, y se verificó como la mejor opción actual con un sitio de búsqueda de Google : 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;
}

Tenga en cuenta que getcwd (3) también está disponible en la biblioteca de Microsoft: getcwd (3) , y funciona de la misma manera que cabría esperar.

Debe vincularse con -loldnames (oldnames.lib, que se realiza automáticamente en la mayoría de los casos), o usar _getcwd () . La versión no prefijada no está disponible en Windows RT.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top