gethostname()给出退出状态-1我该如何处理?

时间:2019-02-15 13:26:17

标签: c++ linux

我正在尝试将计算机名称存储在名为computerName的字符串中。运行gethostname()时,程序退出并显示退出状态-1。我正在尝试弄清楚该如何处理。有没有办法防止程序完全退出,有没有办法找出问题所在。 gethostname()上的文档说它的错误是EFAULT,EINVAL,ENAMETOOLONG和EPERM。我不确定如何抓到其中任何一个。

问题不只是为什么会发生错误,而是如何处理。

发生错误的原因是因为我在具有明显限制的联机ide上运行代码,并且在其他计算机上未发生此错误。我已经尝试在try and catch(...)语句中包含代码,但它仍显示exit_status -1。

void GetComputerName()
  {

    char hostname[1024];
    gethostname(hostname, 1024);

    computerName = hostname;

  }

//and then outputting
std::cout << computerName << std::endl;

预期结果 Linux-1994 //或任何计算机名称

2 个答案:

答案 0 :(得分:1)

您可以通过名为 errno 的全局变量了解这些错误。

由于错误是定义为宏的常量,因此您可以执行以下操作:

if(errno == EFAULT) printf("Specific error!")

Check this to get to know the constants.

答案 1 :(得分:0)

hostname不成功的情况下,您可以简单地为gethostname()添加一个默认值:

    char hostname[1024] = "unknown";
    gethostname(hostname, 1024);

但是,这可能无法解决您的特定问题。

  

运行gethostname()时,程序退出并显示退出状态-1

这不是正常行为。失败时,gethostname()返回一个非零代码并设置errno,但是程序继续执行。

您的运行时环境可能会杀死所有调用gethostname()的应用程序。除了不调用gethostname()或切换到另一个可以运行的在线IDE(live example)之外,您无能为力。