标准 C++ 中是不是有一种可移植的方式来检索主机名?

Posted

技术标签:

【中文标题】标准 C++ 中是不是有一种可移植的方式来检索主机名?【英文标题】:Is there a portable way in standard C++ to retrieve hostname?标准 C++ 中是否有一种可移植的方式来检索主机名? 【发布时间】:2022-01-03 06:35:12 【问题描述】:

我正在开发一个需要使用运行它的计算机的主机名的 C++ 程序。我目前的检索方法是像这样修改 C API:

char *host = new char[1024];
gethostname(host,1024);
auto hostname = std::string(host);
delete host;

是否有一种可移植的现代 C++ 方法来执行此操作,而不包括大型外部库(例如 boost)?

【问题讨论】:

@NathanOliver,虽然简短,但您应该回答一下,不是吗? 战术说明:由于您知道host 指向的缓冲区的寿命和大小,​​因此不需要动态分配。 char host[1024]; 应该对几乎所有人和所涉及的一切都更容易。 如果这只是 Linux,1024 有点多,对于 Linux,HOST_NAME_MAX 是 64,请参见手册页。 最近的 Windows 适合可能是 GetComputerName 这和 gethostname 非常相似,所以包装它们很容易。当然,其他操作系统的所有赌注都没有了。 gethostname 是 POSIX。所以它本质上可以移植到任何具有主机名的操作系统,除了 windows。 【参考方案1】:

不,对此没有标准的 C++ 支持。您要么必须创建自己的函数,要么获取具有此功能的库。

【讨论】:

接受这个作为答案。很不幸,但目前似乎没有其他方法。 至少在未来 C++ 标准添加自己的网络库之前。

以上是关于标准 C++ 中是不是有一种可移植的方式来检索主机名?的主要内容,如果未能解决你的问题,请参考以下文章

是否有一种可移植的方式来定义 INT_MAX?

是否有一种可移植的方式来获取 Python 中的当前用户名?

是否有一种可移植的方式在 Makefile 中制作可移植的可选依赖项?

有没有一种可移植的方式来用 Qt 给线程名称?

使用 testthat 在单元测试中重用变量。是不是有一种可接受的做法来避免重新创建计算量大的变量

在 C++ 中是不是有一种最佳方式来运行指向该值的指针链?