C 혹은 C++ 에서 실행중인 파일 경로 구하기

2024. 8. 27. 18:29프로그래밍

Linux 상에서는 process id가 1234가 일 경우  /proc/1234/exe  에 전체 실행 파일명 포함 경로를 알 수 있고, 여기서 실행파일이 위치한 폴더명을 뜯어낸다.

bool get_exepath(std::string& ret)
{
    char arg1[20];
    char exepath[1024] = {0};
    snprintf(arg1,20,"/proc/%d/exe",getpid());
    if (readlink(arg1, exepath, 1024) < 0) {
       return false;
    }
    std::string fullpath = std::string(exepath);
    std::size_t pos = fullpath.rfind('/');
    if (pos != std::string::npos) {
        ret = fullpath.substr(0, pos);
        return true;
    }
    return false;
}


Windows에서는 GetModuleFileNameW() 을 이용 실행 파일명 포함 경로를 알 수 있고, 이를 이용 실행파일이 위치한 폴더명을 알아낼 수 있다. 아래의 예는 이렇게 구한 전체 path에 실행파일이 있는 실행폴더내 "mymodule.dll"에 대한 전체 path를 구하는 예이다.

	std::wstring prefix;
	std::wstring modulePath(L"mymodule.dll");
    
	WCHAR path[MAX_PATH];
	DWORD n = GetModuleFileNameW(NULL, path, MAX_PATH);
	if (n > 0) {
		std::wstring entirePath(path);
		size_t iPos = entirePath.rfind(L"\\");
		if (iPos >= 0) {
			prefix = entirePath.substr(0, iPos);
			if (prefix.length() > 0) {
				modulePath = prefix + std::wstring(L"\\") + modulePath;
			}
		}
	}

'프로그래밍' 카테고리의 다른 글

OpenVINO int8 모델 변환 2024.5 버전  (0) 2024.12.14
C++ wchar unicode utf-8 utf-32  (0) 2024.09.06
Python과 C 혹은 C++ 연동 사용하기  (0) 2024.08.27
ChatGPT의 sample code 오류  (0) 2023.03.08