[c] C 프로그램에서 현재 디렉토리를 얻는 방법?

프로그램이 시작된 디렉토리를 가져와야하는 C 프로그램을 만들고 있습니다. 이 프로그램은 UNIX 컴퓨터 용으로 작성되었습니다. 나는에서 찾아 봤는데 opendir()telldir(),하지만 telldir()다시 발생 off_t (long int)정말 나에게 도움이되지 않습니다 그래서.

문자열 (char 배열)에서 현재 경로를 어떻게 얻을 수 있습니까?



답변

봤어 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.


답변

질문에 유닉스 태그가 붙어 있지만 대상 플랫폼이 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의로 볼 수 있습니다 : (3)에 getcwd , 당신이 기대하는 것과 동일한 방식으로 작동합니다.

-loldnames(대부분의 경우 자동으로 수행되는 oldnames.lib) 와 연결 하거나을 사용해야 _getcwd()합니다. 접두사가없는 버전은 Windows RT에서 사용할 수 없습니다.


답변

현재 디렉토리 (대상 프로그램을 실행하는 위치)를 가져 오려면 Visual Studio 및 Linux / MacOS (gcc / clang), C 및 C ++ 모두에서 작동하는 다음 예제 코드를 사용할 수 있습니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#if defined(_MSC_VER)
#include <direct.h>
#define getcwd _getcwd
#elif defined(__GNUC__)
#include <unistd.h>
#endif

int main() {
    char* buffer;

    if( (buffer=getcwd(NULL, 0)) == NULL) {
        perror("failed to get current directory\n");
    } else {
        printf("%s \nLength: %zu\n", buffer, strlen(buffer));
        free(buffer);
    }

    return 0;
}


답변