c++17获取当前进程名
时间: 2023-08-08 13:08:37 浏览: 106
在 C++17 中,可以使用 `std::filesystem::path` 类来获取当前进程名。具体实现可以参考以下代码:
```c++
#include <iostream>
#include <filesystem>
int main() {
std::filesystem::path process_path = "/proc/self/exe"; // 获取当前进程路径
std::string process_name = process_path.filename().string(); // 获取当前进程名
std::cout << "Current process name: " << process_name << std::endl;
return 0;
}
```
其中,`/proc/self/exe` 是 Linux 下的一个特殊路径,指向当前进程的可执行文件。在 Windows 平台下,可以使用 `GetModuleFileName()` 函数获取当前进程路径,然后再通过 `std::filesystem::path` 类获取进程名。
相关问题
c++17怎么获取当前进程名
在C++17中,可以使用标准库中的`<thread>`和`<system_error>`头文件中的`std::this_thread::get_id()`函数和`std::system_category()`函数获取当前线程的ID和系统错误类别。然后,可以使用`<Windows.h>`头文件中的`GetModuleFileName()`函数获取当前进程的文件名。
以下是获取当前进程名的示例代码:
```c++
#include <thread>
#include <system_error>
#include <Windows.h>
std::string get_process_name()
{
DWORD pid = GetCurrentProcessId();
HANDLE process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid);
if (process != NULL)
{
HMODULE module;
DWORD cbNeeded;
if (EnumProcessModules(process, &module, sizeof(module), &cbNeeded))
{
char buf[MAX_PATH];
if (GetModuleFileNameExA(process, module, buf, MAX_PATH))
{
std::string path = buf;
std::size_t pos = path.find_last_of("\\/");
if (pos != std::string::npos)
{
return path.substr(pos + 1);
}
}
}
CloseHandle(process);
}
return "";
}
int main()
{
std::string process_name = get_process_name();
std::cout << "Current process name: " << process_name << std::endl;
return 0;
}
```
注意,在使用`GetModuleFileName()`函数时,需要包含`<Windows.h>`头文件,并且代码仅在Windows操作系统上运行。
c++17怎么获取linux当前进程名
你可以使用Linux的`/proc`文件系统来获取当前进程名。`/proc/self/exe`是一个符号链接,指向当前正在执行的可执行文件的路径。你可以使用`readlink()`函数读取该符号链接并获得当前进程的完整路径。然后,你可以使用`basename()`函数从路径中提取文件名,即当前进程名。
下面是一个示例代码:
```c++
#include <unistd.h>
#include <libgen.h>
int main() {
char path[1024];
ssize_t len = readlink("/proc/self/exe", path, sizeof(path)-1);
if (len != -1) {
path[len] = '\0';
const char* name = basename(path);
printf("Current process name: %s\n", name);
}
return 0;
}
```
这个程序将打印当前进程名。注意,这种方法只适用于Linux系统。在其他平台上,可能需要使用不同的方法来获取当前进程名。