반응형

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. thumbnail
    Favicon of https://dobby-the-house-elf.tistory.com BlogIcon MagicDog

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

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

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

    • thumbnail
      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로 받은 실행파일 경로를 조합해야 할 것 같습니다.

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

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