请输入您要查询的百科知识:

 

词条 gethostname()
释义

简述:

返回本地主机的标准主机名。

#include <Winsock2.h>

int PASCAL FAR gethostname(char FAR *name, int namelen);

name: 一个指向将要存放主机名的缓冲区指针。

namelen:缓冲区的长度。

注释:

该函数把本地主机名存放入由name参数指定的缓冲区中。返回的主机名是一个以NULL结束的字符串。主机名的形式取决于Windows Sockets实现-它可能是一个简单的主机名,或者是一个域名。然而,返回的名字必定可以在gethostbyname()和WSAAsyncGetHostByName()中使用。

返回值:

如果没有错误发生,gethostname()返回0。否则它返回SOCKET_ERROR。应用程序可以通过WSAGetLastError()来得到一个特定的错误代码。

错误代码:

WSAEFAULT 名字长度参数太小。

WSANOTINTIALISED 在应用这个API前,必须成功地调用WSAStartup()。

WSAENTDOWN Windows Sockets实现检测到了网络子系统的错误。

WSAEINPROGRESS 一个阻塞的Windows Sockets操作正在进行。

参见:gethostbyname(), WSAAsyncGetHostByName()

函数分析

#include <stdio.h>

#include <unistd.h>

int main()

{

char name[65];

gethostname(name, sizeof(name));

printf("hostname = %s\", name);

}

编译运行

---------------------------------

# gcc test.c

# ./a.out

hostname = zxl

# uname -n

zxl

理论分析

---------------------------------

task_struct

|-----------| struct nsproxy

| | -+-->|------------|

| | -| | count |

| | -| | nslock | struct uts_namespace

| | -| | *uts_ns |---->|---------------------|

|-----------| -| | *ipc_ns | | kref |

| *nsproxy -|--+ | *namespace | |---------------------|

|-----------| |------------| | char sysname[65] |

| | | char nodename[65] |

| | | char release[65] |

| | struct new_utsnamename | char version[65] |

| | | char machine[65] |

|-----------| | char domainname[65] |

|---------------------|

/usr/src/linux-2.6.19/kernel/sys.c

asmlinkage long sys_gethostname(char __user *name, int len)

{

int i, errno;

if (len < 0)

return -EINVAL;

down_read(&uts_sem);

i = 1 + strlen(utsname()->nodename);

if (i > len)

i = len;

errno = 0;

if (copy_to_user(name, utsname()->nodename, i))

errno = -EFAULT;

up_read(&uts_sem);

return errno;

}

utsname() -- 返回当前进程的new_utsname结构

/usr/src/linux-2.6.19/include/linux/utsname.h

static inline struct new_utsname *utsname(void)

{

return &current->nsproxy->uts_ns->name;

}

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/3/16 18:16:23