gethostid 的实现

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)



在移植Linux应用到其他系统时,因为没有这个函数,往往要自己实现这个函数,下面给出一个实现方法:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值