欢迎关注VxWorks567
如转发 请标明出处!
VxWorks设备在启动时会给自己指定一个名字 - target name。后来这个名字去哪里了?
本文以Vx69为例
组件INCLUDE_NET_HOST_SETUP会把它保存起来,并提供函数gethostname()查询它
也可以动态修改这个名字 - sethostname()
汉族孩子上户口时,名字不能超过6个字。VxWorks设备呢?一般是64个字符。而如果你不给它起名字,WindRiver就叫它"vxTarget"
#define TARGET_NAME_DEFAULT "vxTarget" /* target name (tn) */
#define MAXHOSTNAMELEN 64
int gethostname
(
char *name,
size_t nameLen
);
int sethostname
(
char *name,
int nameLen
);
bootrom中还指定了一个host name,它去哪了?使用组件INCLUDE_NET_HOST_SHOW的hostShow()可以看到
同时看到,每个name还对应着自己的ip address。那在程序中如何获取这个信息呢
组件Host Table - INCLUDE_HOST_TBL提供了函数hostGetByName()
当然了,也可以反过来通过IP查询name - hostGetByAddr()
这个Host Table还可以维护更多的设备
Table内部用的是链表,因此对设备的数量没有限制
int hostGetByName
(
char *name
);
STATUS hostGetByAddr
(
int addr,
char *name
);
STATUS hostAdd
(
char *hostName,
char *hostAddr
);
STATUS hostDelete
(
char *name,
char *addr
);
而网络协议栈还提供了更丰富的API,例如:
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 from name server */
#define h_addr h_addr_list[0] /* address, for backward compatiblity */
};
struct hostent *gethostbyname
(
char *pName
);
struct hostent *gethostbyaddr
(
char *pAddr,
int len,
int type
);
有机会再慢慢研究吧
我是泰山 专注VX好多年!
一起学习 共同进步!