gethostname():返回本地主机的标准主机名

原型如下:

#include <unistd.h>
int gethostname(char *name, size_t len);
参数说明:
这个函数需要两个参数:接收缓冲区name,其长度必须为len字节或是更长,存获得的主机名。接收缓冲区name的最大长度:
返回值:如果函数成功,则返回0。如果发生错误则返回-1.错误号存放在外部变量errno中。

gethostbyname()函数说明----用域名或主机名获取IP地址

包含头文件
#include <netdb.h>
#include <sys/socket.h>函数原型:
struct hostent *gethostbyname(const char *name);
这个函数的传入值是域名或者主机名,例如"www.google.cn"等等。传出值,是一个hostent的结构。如果函数调用失败,将返回NULL。
返回hostent结构体类型指针:
struct hostent {char *h_name;   /* official name of host */char **h_aliases;  /*alias list */int h_addrtype;  /* host address type */int h_length; /* length of address */char **h_addr_list;   /* list of addresses*/
}
#define h_addr h_addr_list[0] /* for backward compatibility */

hostent->h_name

表示的是主机的规范名。例如www.google.com的规范名其实是www.l.google.com.

hostent->h_aliases

表示的是主机的别名www.google.com就是google他自己的别名。有的时候,有的主机可能有好几个别名,这些,其实都是为了易于用户记忆而为自己的网站多取的名字。

hostent->h_addrtype

表示的是主机ip地址的类型,到底是ipv4(AF_INET),还是ipv6(AF_INET6)

hostent->h_length

表示的是主机ip地址的长度

hostent->h_addr_list

表示的是主机的ip地址,注意,这个是网络字节存储的。千万不要直接用printf带%s参数来打这个东西,会有问题的哇。所以到真正需要打印出这个IP的话,需要调用inet_ntop()。

const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);

这个函数,是将类型为af的网络地址结构src,转换为主机序的字符串形式,存放在长度为cnt的字符串中。返回指向dst的一个指针。如果函数调用错误,返回值是NULL。

示例如下:

#include <stdio.h>
#include <sys/socket.h>
#include <netdb.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>void handler(int sig)
{printf("recv a sig = %d\n", sig);exit(EXIT_SUCCESS);
}#define ERR_EXIT(m) \do { \perror(m); \exit(EXIT_FAILURE); \} while(0);int main(void)
{char host[100] = {0};if (gethostname(host, sizeof(host)) < 0) {ERR_EXIT("gethostname");}struct hostent *hp;if ((hp = gethostbyname(host)) == NULL) {ERR_EXIT("gethostbyname");}int i = 0;while (hp->h_addr_list[i] != NULL) {printf("hostname: %s\n", hp->h_name);printf("    ip:%s\n", inet_ntoa(*(struct in_addr*)hp->h_addr_list[i]));i++;}return 0;
}

编译运行

-------------------------

# gcc -o getinfo getinfo.c
#./getinfohostname:www.server1.comip:69.172.201.208

注意:试验时主机名要是域名格式(如www.server1.com,若函数为server1时gethostbyname函数返回为NULL),gethostbyname()函数才能获取到信息,否则返回NULL。

使用gethostname()函数和gethostbyname()函数获取主机相关信息相关推荐

  1. 【C函数】sysinfo获取系统相关信息

    Linux中,sysinfo是用来获取系统相关信息的结构体,返回系统的统计信息. 头文件: #include <sys/sysinfo.h> 函数声明: int sysinfo (stru ...

  2. 使用WMI编程获取主机硬件信息(CPU_ID,硬盘、主板、BIOS序列号,Mac地址)

    最近在公司实习,有个应用需要获取windows主机的一些硬件信息,在网上查阅了一些资料,大部分都是使用WMI编程来实现的. 因此小菜鸟自己也用WMI实现了一下,封装为函数GetUserInfo(),具 ...

  3. muduo:获取进程相关信息

    muduo里面有专门获取进程信息的类,记录一下. // Use of this source code is governed by a BSD-style license // that can b ...

  4. youtube根据vedioId获取视频相关信息

    根据vedioId获取视频相关信息 https://www.googleapis.com/youtube/v3/videos?key=xxx&id=I6uBoYJxf4k&part=s ...

  5. 7.3 Uipath UiPath之获取邮件相关信息

    UiPath之获取邮件相关信息 UiPath之获取邮件相关信息 第一步:先看看GetOutLookMailMessage这个应该怎么设定 第二步:新建一个Execl Application Scope ...

  6. 金蝶EAS登录获取用户相关信息失败、EAS默认用户名、密码

    1.sql2005,新装的EAS7.0服务器,新建一个帐套,都弄好了以后,客户端登陆的时候提示错误:获取用户相关信息失败!  日志里说该游标未声明 解决方法:在SQL SERVER执行alter ta ...

  7. adb 查看屏幕大小_adb shell wm 命令获取屏幕相关信息

    adb shell wm命令获取屏幕相关信息 Tags: adb_shell wm命令在4.x才有的,不同的版本下部分参数不同 wm [subcommand] [options] 获取屏幕大小:wm ...

  8. python获取远程主机信息_python远程获取主机监控信息

    轻松监控上万台服务器:企业运维监控平台架构设计与实践指南 一.Cacti/Nagios/Zabbix/centreon/Ganglia之抉择 1.cacti Cacti是一套基于PHP,MySQL,S ...

  9. Qt开发中获取系统相关信息的方法,值得收藏参考

    本文转自https://zhuanlan.zhihu.com/p/111005951,这篇写的很详细,但是macos相关的只有一部分太少了,基本都是Windows的,我个人后续也会把相关的系统调用方式 ...

最新文章

  1. 你好,C++(34)有一只叫做多利的羊 6.2.4 拷贝构造函数
  2. JAVA 7 正式版发布 新特性一览表
  3. NPOI Word 多级标题结构设置
  4. win7 用 Activation激活 重启 进入 Acer eRecovery Management 解决办法
  5. 单片机项目开发设计 - 器件选型原则根据、常用单片机资源配置要点(GPIO、SPI、IIC、ADC)
  6. mq相关的面试突击笔记 大神公众号“石杉的架构笔记
  7. PING用一生诠释了TCP/IP------二三层转发为PING劈荆斩棘(转载)
  8. 打上花火(打ち上げ花火) --罗马音歌词中文谐音歌词
  9. STM32F103ZE工程移植到STM32F107VC上软件调试时死循环在while((RCC-CR RCC_CR_PLL2RDY) == 0) { }
  10. Elastic 与 AWS 和解、英伟达收购 ARM 失败、英特尔加入RISC-V 组织|开源月报 Vol. 03...
  11. mpu6050六轴传感器msp430驱动程序
  12. 表情包制作APP的相关推荐 可以制作表情包的软件
  13. android dex 加固,Dex文件加固
  14. 计算机高层应用,计算机通信技术在高层建筑智能化工程中的应用
  15. java毕业设计电动机营销系统Mybatis+系统+数据库+调试部署
  16. Swin Transformer详解: Hierarchical Vision Transformer using Shifted Windows
  17. 2022年卫星导航系统模拟器市场前景分析及研究报告
  18. Application LoadBalance-直接返回404状态码
  19. 项目马上就告一段落了
  20. ClickHouse编程指南之DatabaseEngine和TableEngine

热门文章

  1. kotlin学习之数据类(七)
  2. docker部署resin应用
  3. 【简便解法】1090 危险品装箱 (25分)_33行代码AC
  4. 有一批共n个集装箱要装上2艘载重量分别为C1和C2的轮船,其中集装箱i的重量为wi,且 装载问题要求确定,是否有一个合理的装载方案可将这n
  5. 你不知道LinkedList中的方法
  6. 动态添加组件_使用vue.js的动态组件模板
  7. [java][工具类][Arrays]
  8. shell脚本详解(三)——循环语句之for循环
  9. mysql 二进制转字符串_MySql字符转义 | 学步园
  10. python笔记之for循环