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

StackOverflow https://stackoverflow.com/questions/298510

  •  08-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

Посмотрели ли вы 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
);

Эти ответы применимы как к С, так и к С ++ коду.

Ссылка, предложенная user4581301 в комментарий к другому вопросу и подтвержден в качестве текущего наиболее популярного на сайте поиска 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;
}

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top