标准 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++ 中是不是有一种可移植的方式来检索主机名?的主要内容,如果未能解决你的问题,请参考以下文章
是否有一种可移植的方式来获取 Python 中的当前用户名?
是否有一种可移植的方式在 Makefile 中制作可移植的可选依赖项?