注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

Linux的机器名,hostname和版本信息在内核的的结构utsname  

2011-06-15 17:09:01|  分类: linux相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
内核自己维护一个这样的结构,自己的程序可以在适当的时候从这个结构读出来就可以了,内核应该自己更新hostname这些信息到这个结构的吧。

2.6.39 版本的
  14linux/include/linux/utsname.h
 
 
  43struct uts_namespace {
  44        struct kref kref;
  45        struct new_utsname name;
  46        struct user_namespace *user_ns;
  47};
 
  #define __NEW_UTS_LEN 64
  15
  16struct old_utsname {
  17        char sysname[65];
  18        char nodename[65];
  19        char release[65];
  20        char version[65];
  21        char machine[65];
  22};
  23
  24struct new_utsname {
  25        char sysname[__NEW_UTS_LEN + 1];
  26        char nodename[__NEW_UTS_LEN + 1];
  27        char release[__NEW_UTS_LEN + 1];
  28        char version[__NEW_UTS_LEN + 1];
  29        char machine[__NEW_UTS_LEN + 1];
  30        char domainname[__NEW_UTS_LEN + 1];
  31};
 
 
  看看像gethostname这些调用是怎么读的
  ------------------------------新版本内核
 
1221SYSCALL_DEFINE2(gethostname, char __user *, name, int, len)
1222{
1223        int i, errno;
1224        struct new_utsname *u;
1225
1226        if (len < 0)
1227                return -EINVAL;
1228        down_read(&uts_sem);
1229        u = utsname();
1230        i = 1 + strlen(u->nodename);
1231        if (i > len)
1232                i = len;
1233        errno = 0;
1234        if (copy_to_user(name, u->nodename, i))
1235                errno = -EFAULT;
1236        up_read(&uts_sem);
1237        return errno;
1238}
 
    83static inline struct new_utsname *utsname(void)
  84{
  85        return &current->nsproxy->uts_ns->name;
  86}
 
 
 
 
  -----------------------------久版本内核,都是存在一个system_utsname结构里面,内核export了这个symbol了,自己写个内核模块也是可以访问的。
 
  1396#ifdef __ARCH_WANT_SYS_GETHOSTNAME
1397
1398asmlinkage long sys_gethostname(char __user *name, int len)
1399{
1400        int i, errno;
1401
1402        if (len < 0)
1403                return -EINVAL;
1404        down_read(&uts_sem);
1405        i = 1 + strlen(system_utsname.nodename);
1406        if (i > len)
1407                i = len;
1408        errno = 0;
1409        if (copy_to_user(name, system_utsname.nodename, i))
1410                errno = -EFAULT;
1411        up_read(&uts_sem);
1412        return errno;
1413}
 
  ---------------------------------
  评论这张
 
阅读(674)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017