先介绍一下如何获取主机名和服务名吧!
用hostname命令可以获取主机名
那如何获取服务名呢?
通过这个命令systemctl list-unit-files 可以获取系统服务
来了解一个服务,nfs服务。
NFS (Network File System) 即网络文件系统。一种使用于分散式文件系统的协定,功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。
有时候我们需要直接获取一个地址结构。用什么办法呢?
用getaddrinfo 函数
#include<sys/socket.h>
#include<netdb.h>
int getaddrinfo(const char* host,const char* service,const struct addrinfo *hint,struct addrinfo **res);
void freeaddrinfo(struct addrinfo *ai);
提供一个主机名和服务名 给第一参数 第二参数
第三参数是一个 addrinfo 结构的指针。这个结构名暂且叫hint,它起到过滤作用。
第四参数是一个 指向addrinfo指针的 指针。是一个链表结构,一个存储addrinfo指针的链表
那一个addrinfo 结构有蕴含什么信息?
int ai_flags //指定了这个addrinfo的行为
(AI_CANONNAME 需要一个规范名字
AI_ALL 寻找IPV4 IPV6地址
AI_ADDRCONFIG 查询配置的地址类型
...etc)
int ai_family //地址族
int ai_socktype //套接字类型
int ai_protocol //协议类型
socklen_t ai_addrlen //地址长度
struck sockaddr *ai_addr //地址结构
char *ai_canonname //
struct addrinfo *ai_next
...etc
还有一个函数与之相反是通过一个地址获得主机名和服务名
#include<sys/socket.h>
#include<netdb.h>
int getnameinfo(const struct sockaddr *addr,socklen_t alen,
char* host,socklen_t hostlen,
char* service,socklen_t servlen,int flags);
还有一些其他的类似结构体
hostent 主机信息的
netent 网络信息的
protoent 协议信息的
servent 服务信息的