如何在C++中获取当前进程ID和机器名称

7
在C#中,获取当前进程的ID和机器名称很简单:
int processID = Process.GetCurrentProcess().Id;
string machineName = Environment.MachineName;

我该如何在本地C++中检索它们?

5
这不属于C++标准的一部分,因此无法实现,这取决于操作系统。 - Ulrich Dangel
你使用的是哪个操作系统? - Konrad Rudolph
1
C++11有boost::this_thread::get_id()吗? - Flexo
与 C++/CLI 相反的是 @Ulterior。 - Seth Carnegie
1
@Flexo 确实是这样。但那不是进程 ID。 - JustSid
3个回答

8

根据您的评论,平台为 Windows 7,WINAPI 提供 GetCurrentProcessId()GetComputerName()

GetComputerName() 的简单示例:

const int BUF_SIZE = MAX_COMPUTERNAME_LENGTH + 1;
char buf[BUF_SIZE] = "";
DWORD size = BUF_SIZE;

if (GetComputerNameA(buf, &size)) // Explicitly calling ANSI version.
{
    std::string computer_name(buf, size);
}
else
{
    // Handle failure.
}

1
添加 #include <windows.h> 并调用函数:DWORD pid = GetCurrentProcessId(); - hmjd
1
DWORD是一个32位的无符号整数,因此请使用unsigned int。 - hmjd
getCurrentProcessID()很简单。GetComputerName()更复杂。你能告诉我如何使用它吗? - olidev
我遇到了一个错误: error C2664: 'GetComputerNameW' : 无法将参数1从'char [16]'转换为'LPWSTR'。 - olidev
1
或者您可以显式调用 GetComputerNameA() 并使用 charstd::string - hmjd
显示剩余3条评论

5

getpid()gethostname() - 使用man命令了解它们的所有信息...


3
那不是取决于操作系统吗?(我是在使用修辞手法,因为我知道确实取决于操作系统。) - trojanfoe
1
@nim 我删除了我的评论,但我认为 OP 的意思是他不想使用不属于 C++ 标准的函数。 - Ulrich Dangel
@trojanfoe,你看过这个网站吗:http://www.suacommunity.com/dictionary/getpid-entry.php ;) - Nim
@nim 所有操作系统都有这些功能吗? - trojanfoe
@trojanfoe,是的,我也这么想,但只是为了让事情变得复杂一些,它们将被称为略有不同的名称...因此像我上面链接的网站这样的东西是非常有用的。 - Nim
@devn,“man”是*nix世界中的帮助等效工具,因为你在Windows上,所以有点多余的评论...(顺便说一句,gethostname也有一个等效工具,请浏览我上面链接的网站)。 - Nim

3
#ifdef _WIN32
 return GetCurrentProcessId(); 
#else
 return ::getpid();
#endif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接