Как получить текущий каталог в программе на 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.