1.主机标识

每一台机器都有一个主机名,主机名由系统管理员指定,在网络中主机名可能是一个网络域名。

函数 gethostname() 和 sethostname() 可以用来获取和设置主机名。

函数原型如下所示:

#include<unstd.h>

int gethostname(char *name, size_t size);
int sethostname(const char *name, size_t length);

2.硬件/软件类型识别

函数 uname() 可以用来查看运行该程序的计算机的操作系统版本信息和硬件信息。

#include<sys/utsname.h>

int uname(struct utsname *info);

uname() 是一个系统调用,成功时返回非负整数,同时将操作系统和主机的信息保存在info所指向的数据结构中;失败时返回-1.


utsname结构成员如下所示:


成员                                               描述

char sysname[]                             操作系统名

char nodename[]                          计算机的主机名

char release[]                                操作系统的当前版本号

char version[]                               操作系统当前版本内的级别号

char machine[]                             描述使用的硬件类型


下面举一个例子演示这几个函数的用法:

/*
 * main.c
 *
 *  Created on: 2013年7月30日
 *      Author: DLUTBruceZhang
 */

#include<stdio.h>
#include<unistd.h>
#include<sys/utsname.h>

#define MAXHOSTNAMELEN 64

int main(void)
{
	struct utsname uts;
	char hostname[MAXHOSTNAMELEN];
	size_t size = MAXHOSTNAMELEN;

	if(gethostname(hostname, size) != 0)
	{
		printf("error");
		return -1;
	}
	printf("hostname:%s\n", hostname);

	if(uname(&uts) < 0)
	{
		printf("error");
		return -1;
	}
	printf("System is %s on %s hardware\n",uts.sysname,uts.machine);
	printf("Nodename is %s\n",uts.nodename);
	printf("Release is %s,  Version is %s\n",uts.release,uts.version);

	return 0;
}

执行结果如下:

hostname:ubuntu
System is Linux on i686 hardware
Nodename is ubuntu
Release is 3.0.0-12-generic,  Version is #20-Ubuntu SMP Fri Oct 7 14:50:42 UTC 2011

UNIX/LINUX程序设计教程(1)-- 获取系统信息的更多相关文章

  1. 《Unix&Linux大学教程》学习笔记一:历史与常识

     “为什么说Unix/Linux是自由的:         因为我们可以自己组装一个操作系统:Unix/Linux内核+其他实用工具+编程工具+GUI         因为我们可以自由地获取开源工作者 ...

  2. unix&linux大学教程 目录

    第1章unix简介 第2章什么是linux?什么是unix 第3章unix连接 第4章开始使用unix 第5章gui:图形用户界面 第6章unix工作环境 第7章unix键盘使用 第8章能够立即使用的 ...

  3. 《Unix&Linux大学教程》学习笔记6——Unix文件系统

    1:Unix文件类型——3种 普通文件(常规文件):文本文件(纯文本.脚本.源程序.配置文件.html等).二进制文件(多媒体文件.数据库等) 目录:用于组织文件 伪文件:不存储数据,目的是提供一种服 ...

  4. 《Unix&Linux大学教程》学习笔记5 :正则表达式

    1:Unix下正则表达式规则

  5. 《Unix&Linux大学教程》学习笔记四:标准I/O 与 过滤器

    1:标准IO Unix中的标准IO主要包括:标准输入.标准输出(正常输出).标准错误(异常信息) 2:重定向输出 内容 > 文件名 :将内容输出到文件,并且覆盖文件原来内容:文件不存在则新建 内 ...

  6. 《Unix&Linux大学教程》学习笔记二:指令常识

    1:指令的本质——调用可执行程序 在Shell输入命令时,其实就是根据名称运行相应的程序. 2:在系统中查找程序 which 指令名 type 指令名 3:时间与日历 date [-选项] 参数 ca ...

  7. 《Unix&Linux大学教程》学习笔记七:进程与作业控制

    1:进程:一个内存中的程序+程序所需数据+管理程序的各种状态信息. 2:进程由内核进行管理,内核使用调度器,给予进程一个时间片来运行,然后切换到下一个进程. 3:进程分叉 fork :创建一个子进程 ...

  8. 《Unix&Linux大学教程》学习笔记三:Shell常识

    1:全局变量与局部变量 全局:可以从父进程传递给子进程的变量,如:环境变量. 局部:只能在特定的子Shell中使用的变量. 局部变量变全局:使用 “export 局部” 指令将创建的局部变量导出到环境 ...

  9. 嵌入式Linux开发教程:Linux常见命令(上篇)

    摘要:这是对周立功编著的<嵌入式Linux开发教程>的第7期连载.本期刊载内容有关LinuxLinux常见命令中的导航命令.目录命令和文件命令.下一期将连载网络操作命令.安装卸载文件系统等 ...

随机推荐

  1. bzoj3126[Usaco2013 Open]Photo 单调队列优化dp

    3126: [Usaco2013 Open]Photo Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 374  Solved: 188[Submit] ...

  2. SpringCloud学习之SpringCloudBus

    一.spring-cloud-bus是什么? 回答这个问题之前,我们先回顾先前的分布式配置,当配置中心发生变化后,我们需要利用spring-boot-actuator里的refresh端点进行手动刷新 ...

  3. 入口文件开始,分析Vue源码实现

    Why? 网上现有的Vue源码解析文章一搜一大批,但是为什么我还要去做这样的事情呢?因为觉得纸上得来终觉浅,绝知此事要躬行. 然后平时的项目也主要是Vue,在使用Vue的过程中,也对其一些约定产生了一 ...

  4. 备忘:MySQL中修改表中某列的数据类型、删除外键约束

    -- MySQL中修改表中某列的数据类型 ALTER TABLE [COLUMN] 表名 MODIFY 列名 列定义; -- 删除外键约束 SHOW CREATE TABLE 表名; -- 复制CON ...

  5. Linux学习之CentOS(十六)-----内存置换空间(swap)之建置(转)

    内存置换空间(swap)之建置 安装时一定需要的两个 partition 啰! 一个是根目录,另外一个就是 swap(内存置换空间), swap 的功能就是在应付物理内存不足的情况下所造成的内存延伸记 ...

  6. div,margin,padding

    <!-- 类比礼品盒里装方块月饼.月饼的食用部分(我们把它称之为月饼肉身)要装在小包装盒里,月饼肉身即为content.月饼肉身与直接包裹它的小包装盒(我们把它叫做月饼的衣服)之间的距离叫pad ...

  7. android基础-界面开发注意事项

    做安卓开发时一定要注意,主线程不能更改UI界面,如果出现程序运行时崩溃的情况,如果没有明显的语法错误,请检查自己的进程是否出现冲突,崩溃.如果有与后台的连接,即请求向服务器发送请求的时尤其需要注意,或 ...

  8. 网络协议 finally{ return问题 注入问题 jdbc注册驱动问题 PreparedStatement 连接池目的 1.2.1DBCP连接池 C3P0连接池 MYSQL两种方式进行实物管理 JDBC事务 DBUtils事务 ThreadLocal 事务特性 并发访问 隔离级别

    1.1.1 API详解:注册驱动 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 原因有2个: >导致驱动被注册2 ...

  9. 05_CRUD操作

      1.Params拦截器: 作用:Parameters拦截器将把表单字段映射到ValueStack栈的栈顶对象的各个属性中, 注意:如果某个字段在栈顶对象中没有对应的属性,则Params拦截器将尝试 ...

  10. ACM 人见人爱A^B

    求A^B的最后三位数表示的整数. 说明:A^B的含义是"A的B次方"  Input输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10 ...