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

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

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

Ответ 1

Вы посмотрели getcwd()?

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

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

#include <unistd.h>
#include <stdio.h>
#include <errno.h>

int main() {
   char cwd[1024];
   if (getcwd(cwd, sizeof(cwd)) != NULL)
       fprintf(stdout, "Current working dir: %s\n", cwd);
   else
       perror("getcwd() error");
   return 0;
}

Ответ 2

Посмотрите справочную страницу getcwd.

Ответ 3

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

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

Эти ответы относятся как к C, так и коду С++.

Ссылка, предложенная user4581301 в comment на другой вопрос, и подтвержденный как текущий топ-выбор с сайтом поиска Google: microsoft.com getcurrentdirectory.

Ответ 4

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

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