您的位置:首页 > 其它

从存储器内部看uname结构

2016-06-28 09:29 281 查看
#include <sys/utsname.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>

int main()
{
struct utsname name;
if(uname(&name)==-1){
perror("uname error");
return -1;
}
size_t len=0;
char* addr=(char*)&name;
while(len<sizeof(struct utsname)){
if(*(addr+len)=='\0'){
++len;
continue;
}
printf("%s ",addr+len);
len+=strlen(addr+len);
}
putchar('\n');
return 0;
}


结果如下:

Linux XXX 3.19.0-61-generic #69~14.04.1-Ubuntu SMP Thu Jun 9 09:09:13 UTC 2016 x86_64 (none)

对于utsname结构的定义可直接到

struct utsname{
char sysname[_UTSNAME_SYSNAME_LENGTH];
char nodename[_UTSNAME_NODENAME_LENGTH];
char release[_UTSNAME_VERSION_LENGTH];
char machine[_UTSNAME_MACHINE_LENGTH];
#if _UTSNAME_DOMAIN_LENGHT - 0
#ifdef __USE_GNU
char domainame[_UTSNAME_DOMAIN_LENGTH];
#else
char __domainname[_UTSNAME_DOMAIN_LENGTH];
#endif
#endif
};


由此可知在Linux中utsname结构的对象存储器中存储形式如下:

内容 | sysname[] |: nodename[] |: release[] |: version[] |: machine[]: | ….. |

参考书:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unix