반응형

linux에서는 realpath 함수,   windows 에서는 GetModuleFileName 함수를 사용하여 실행파일의 절대 경로를 얻습니다. 

 

 

2020. 12. 17 최초작성

2020. 01. 22 윈도우 예제코드 버그 수정. 한글 이름 디렉토리인 경우 문제가 있었음.  



Linux


#include <limits.h> /* PATH_MAX = 4096 */
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char buf[PATH_MAX];
    char *res = realpath(".", buf);
    if (res)
    {
        printf("%s\n", buf);
    } else
    {
        perror("realpath");
        exit(1);
    }

    return 0;
}







Windows


#include <iostream>
#include <Windows.h>
#include <atlconv.h>


int main()
{
wchar_t path[MAX_PATH] = { 0 };
GetModuleFileName(NULL, path, MAX_PATH);

USES_CONVERSION;
std::string str = W2A(path);
str = str.substr(0, str.find_last_of("\\/"));

printf("%s\n", str.c_str());
}



반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 ~~

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요 ^^

  1. Favicon of https://dobby-the-house-elf.tistory.com BlogIcon MagicDog 2021.03.15 18:50 신고

    실행 파일의 경로가 아니라 현재 디렉토리를 반환하는 것 같습니다.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2021.03.15 18:52 신고

      실행퍼일이 실행된 위치가 반환안되나요? 운영체제 어느쪽에서 그런가요?

    • Favicon of https://dobby-the-house-elf.tistory.com BlogIcon MagicDog 2021.03.16 13:49 신고

      realpath의 첫번 째 인자가 상대 경로로 들어가면 실행 파일의 위치가 아니라 프로그램이 실행 된 위치를 기준으로 반환합니다. OS 상관없이 동일하게 작동합니다.

      /Home/ 에서 ./Programs/EXEFILE 을 실행할 경우

      realpath(".", buf); 는

      /Home/Programs 를 반환 하지 않고
      /Home 만을 반환합니다.

      /Home/Programs 를 반환하게 하려면

      realpath("./Programs", buf); 이렇게 해야 합니다.

      프로그램의 정확한 위치를 알고 싶으면 main에서 args로 받은 실행파일 경로를 조합해야 할 것 같습니다.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2021.03.16 13:57 신고

      좋은 정보 감사합니다. 언급하신대로 실행할 수 있다는 걸 생각지못했네요. argv[0]에 포함된 경로가 현재 위치에 대한 상대경로 혹은 절대경로가 아니면 제대로 동작안하는 군요.

+ Recent posts