#include <linux/limits.h>
string exePath() {
char buffer[PATH_MAX * 2 + 1] = { 0 };
int n = -1;
#if defined(_WIN32)
n = GetModuleFileNameA(NULL, buffer, sizeof(buffer));
#elif defined(__MACH__) || defined(__APPLE__)
n = sizeof(buffer);
if (uv_exepath(buffer, &n) != 0) {
n = -1;
}
#elif defined(__linux__)
n = readlink("/proc/self/exe", buffer, sizeof(buffer));
#endif
string filePath;
if (n <= 0) {
filePath = "./";
}
else {
filePath = buffer;
}
#if defined(_WIN32)
//windows下把路径统一转换层unix风格,因为后续都是按照unix风格处理的
for (auto &ch : filePath) {
if (ch == '\\') {
ch = '/';
}
}
#endif //defined(_WIN32)
return filePath;
}
string exeDir() {
auto path = exePath();
return path.substr(0, path.rfind('/') + 1);
}
string exeName() {
auto path = exePath();
return path.substr(path.rfind('/') + 1);
}