gethostname()

返回本地主機的標準主機名

#include <Winsock2.h>

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

name: 一個指向將要存放主機名的緩衝區指針

namelen:緩衝區的長度。

基本介紹

  • 中文名:gethostname()函式
  • 別稱:網路信息查詢函式
  • 套用學科:計算機編程
  • 功能:得到主機名的指針
注釋:,返回值:,錯誤代碼:,函式分析,

注釋:

該函式把本地主機名存放入由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\n", 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;
}

相關詞條

熱門詞條

聯絡我們