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 |