Как получить текущий каталог в программе C?

Я делаю программу на C, где мне нужно получить каталог, из которого запускается программа. Эта программа написана для компьютеров UNIX. Я смотрел на opendir() и telldir(), а telldir() возвращает off_t (long int), Так что это действительно не помогает мне.

как я могу получить текущий путь в строку (массив char)?

5 ответов


вы посмотрели на getcwd()?

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

простой пример:

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

найдите справочную страницу для getcwd.


хотя вопрос помечен Unix, люди также могут посетить его, когда их целевой платформой является Windows, а ответ для Windows -GetCurrentDirectory() функция:

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

эти ответы применимы как к коду C, так и к c++.

ссылка, предложенная user4581301 на комментарий к другому вопросу и проверено как текущий верхний выбор с помощью поиска Google 'site: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;
}

отметим, что getcwd(3) также доступен в libc от Microsoft:getcwd (3), и работает так же, как вы ожидаете.

необходимо связать с -loldnames (oldnames.lib, что в большинстве случаев делается автоматически), или используйте _getcwd(). Неподготовленная версия недоступна в Windows RT.