utsname的字段nodename和gethostname()的name所指向的输出字符串之间有什么区别?

时间:2018-09-05 01:27:48

标签: c linux hostname

来自APUE

#include <sys/utsname.h>
int uname(struct utsname *name);
     

其中

struct utsname {
char  sysname[]; /* name of the operating system */
char  nodename[]; /* name of this node */
char  release[]; /* current release of operating system */
char  version[]; /* current version of this release */
char  machine[]; /* name of hardware type */
};
     

此功能来自System V,在较早的日子,nodename   元素足以在UUCP网络上引用主机。

  

BSD派生的系统提供了gethostname函数以返回   仅主机名如果主机已连接到   TCP / IP网络,主机名通常是完全限定的域   主机名

#include <unistd.h>
int gethostname(char *name, int namelen);

我想知道utsname的字段nodenamename的{​​{1}}指向的输出字符串之间有什么区别?

谢谢。

1 个答案:

答案 0 :(得分:1)

自从您标记了此以来,我想我们正在专门讨论Linux。

Linux手册页项目的man 2 gethostname说:

  

GNU C库不使用gethostname()系统调用;     而是将gethostname()作为调用的库函数来实现     uname(2)并从返回的nodename字段中复制最多len个字节     成名。

因此,在Linux上,两者都是由同一系统调用提供的,并且没有区别。