Какие различия существуют между полем `utsname`` nodename` и выходной строкой, на которую указывает `name` из` gethostname () `? - PullRequest
0 голосов
/ 05 сентября 2018

от 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 nodename и строкой вывода, указанной name из gethostname()?

Спасибо.

1 Ответ

0 голосов
/ 05 сентября 2018

Поскольку вы отметили это , я предполагаю, что мы говорим конкретно о Linux.

Проект man-страниц Linux get 2 имя_хоста говорит:

Библиотека GNU C не использует системный вызов gethostname (); вместо этого он реализует gethostname () как библиотечную функцию, которая вызывает uname (2) и копирует до len байтов из возвращенного поля nodename в имя.

Итак, в Linux оба обеспечиваются одним и тем же системным вызовом, и нет никакой разницы.

...