print?static long gethostid(void)
{
long result = 0;
char name[1024];
struct hostent *hent = NULL;
char **p = NULL;
struct in_addr in;
if (gethostname(name, 1024) == 0)
{
if ((hent = gethostbyname(name)) != NULL)
{
p = hent->h_addr_list;
if (p && *p)
{
(void) memcpy(&in.s_addr, *p, sizeof(in.s_addr));
result = (long)in.s_addr;
}
}
}
return result;
}
static long gethostid(void)
{
long result = 0;
char name[1024];
struct hostent *hent = NULL;
char **p = NULL;
struct in_addr in;
if (gethostname(name, 1024) == 0)
{
if ((hent = gethostbyname(name)) != NULL)
{
p = hent->h_addr_list;
if (p && *p)
{
(void) memcpy(&in.s_addr, *p, sizeof(in.s_addr));
result = (long)in.s_addr;
}
}
}
return result;
}
gethostid
man page 上這樣子描述
GETHOSTID(2) Linux Programmer's Manual GETHOSTID(2)
NAME
gethostid, sethostid - get or set the unique identifier of the current host
SYNOPSIS
#include <unistd.h>
long gethostid(void);
int sethostid(long hostid);
DESCRIPTION
Get or set a unique 32-bit identifier for the current machine. The 32-bit identifier is intended to be unique among all UNIX systems in existence. This
normally resembles the Internet address for the local machine, as returned by gethostbyname(3), and thus usually never needs to be set.
The sethostid() call is restricted to the superuser.
The hostid argument is stored in the file /etc/hostid.
RETURN VALUE
gethostid() returns the 32-bit identifier for the current host as set by sethostid(2).
CONFORMING TO
4.2BSD; these functions were dropped in 4.4BSD. SVr4 includes gethostid() but not sethostid(). POSIX.1-2001 specifies gethostid() but not sethostid().
FILES
/etc/hostid
EXAMPLE
id = gethostid ();
/* This is a no-op unless unsigned int is wider than 32 bits. */
id &= 0xffffffff;
SEE ALSO
hostid(1), gethostbyname(3)