进一步检查C头文件

时间:2016-07-19 12:19:18

标签: c++ c visual-studio-2013 header-files msdn

我正在通过查看 Microsoft Visual Basic 2013 中正在运行的数据包嗅探器的代码来学习网络。

下面是创建指向 hostent结构的指针的代码,获取 localhost主机名,并将其加载到名为 hostent结构中EM>本地

struct hostent *local;
gethostname(hostname, sizeof(hostname))
local = gethostbyname(hostname);

下一部分可以用点分十进制表示法打印地址。

for (i = 0; local->h_addr_list[i] != 0; ++i)
{
    memcpy(&addr, local->h_addr_list[i], sizeof(struct in_addr));
    printf("  Interface Number : %d Address : %s\n",i,inet_ntoa(addr));
}

现在,我想了解这一切是如何运作的。 。

说我想了解inet_ntoa(),我右键单击并选择转到定义转到声明,它会将我发送到 WinSock2.h ,显示:

inet_ntoa(
    __in struct in_addr in
);

这似乎是显示参数但不是函数的工作方式或返回值。这意味着我必须参考 MSDN 来了解每次发生的事情。

我的问题是:代码在哪里阅读正在发生的事情,所以我不必使用这些文档?

E.g。 inet_ntoa函数内容在哪里?

1 个答案:

答案 0 :(得分:3)

你在这里:

#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>

/* The interface of this function is completely stupid, it requires a
   static buffer.  We relax this a bit in that we allow one buffer for
   each thread.  */

static __thread char buffer[18];

char *inet_ntoa (struct in_addr in)
{
   unsigned char *bytes = (unsigned char *) &in;
   __snprintf (buffer, sizeof (buffer), "%d.%d.%d.%d",
               bytes[0], bytes[1], bytes[2], bytes[3]);

  return buffer;
}

取自 inet_ntoa.c glibc 2.23

请记住, glibc是开源的,所以如果你想探索一下并了解幕后的内容,请不要犹豫,下载它!

此致