`
peizhiinfo
  • 浏览: 1427153 次
文章分类
社区版块
存档分类
最新评论

linux系统中如何通过程序来获知系统信息

 
阅读更多

linux系统中如何通过程序来获知系统信息

最近在做一个项目,遇到要在程序中动态的获取设备硬件信息。纠结了我很长时间,今天突然发现原来在linux中有API函数直接就可以实现。对于好东西,当然要和大家share下了。

一.uname()函数

1.使用uname函数来实现获取系统信息

1>函数原型

#include <sys/utsname.h>

int uname(struct utsname *buf);

2>函数功能:

该函数会告诉我们系统的相关信息。

3>函数返回值

函数返回信息存放在struct utsname结构体buf中,当函数成功时会返回0,当发生错误时会返回-1。

4>struct utsname的定义如下:

#include<sys/utsname.h>

struct utsname{

char sysname[SYS_NMLN];

char nodename[SYS_NMLN];

char release[SYS_NMLN];

charversion[SYS_NMLN];

char machine[SYS_NMLN];

char __domainname[SYA_NMLN];

};

结构体成员描述如下:

Ø sysname:表示正在使用的操作系统。对于Linux而言,这个值为“Linux”。

Ø nodename: 表示设备的主机名

Ø release:操作系统发布号

Ø version:操作系统版本号

Ø machine代表主机的硬件类型,例如“i686”代表一个奔腾CPU.

Ø domainname返回主机的域名

2.程序实例:

#include<unistd.h>

#include<string.h>

#include<errno.h>

#include<sys/utsname.h>

int main(int argc,char **argv)

{

int s;

struct utsname u_name;

s = uname(&u_name);

if (s < 0){

printf(“uname()failed\n”);

exit(1);

}

printf(“sysname[]=%s\n”,u_name.sysname);

printf(“nodename[]=%s\n”,u_name.nodename);

printf(“release[]=%s\n”,u_name.release);

printf(“version[]=%s\n”,u_name.version);

printf(“machin[]=%s\n”,u_name.machine);

printf(“domainname[]=%s\n”,u_name.__domainname);

}

二.gethostname和getdomainname函数

通过这两个函数可以实现获得设备的主机名和域名

1.gethostname()函数

1>函数功能:

可以用来确定当前的主机名。

2>函数原型:

#include<unistd.h>

intgethostname(char *name,size_t len);

3>函数形参

Ø name:接收缓冲区。

Ø len:接收缓冲区的最大长度

4>函数返回值

如果函数执行成功,则返回零;如果发生错误则返回-1。错误号存放在外部变量errno中。

2.getdomainname()函数

1>函数功能

可以允许主机获得程序正在运行的主机的NIS域名。

2>函数原型

#include<unistd.h>

intgetdomainname(char *name,size_t len);

3>函数形参

Ø name:接收缓冲区。

Ø len:接收缓冲区的最大长度

4>函数返回值

如果函数执行成功,则返回零;如果发生错误则返回-1。错误号存放在外部变量errno中。

3.函数实例

#include<stdio.h>

#include<stdlib.h>

#include<unistd.h>

#include<string.h>

#include<errno.h>

int main(int argc,char **argv)

{

int s;

char buf[32];

s = gethostname(buf,sizeof(buf));

if( s < 0){

printf(“gethostname:failed:\n”);

exit(1);

}

printf(“host name:%s\n”,buf);

s =getdomainname(buf,sizeof(buf));

if(s <0){

printf(“getdomainname()failed\n”);

exit(1);

}

printf(“the domain name=%s\n”,buf);

return 0;

}

分享到:
评论

相关推荐

    如何在linux操作系统下检测内存泄漏

    在 linux 或者 unix 下,C++ 程序缺乏相应的手段来检测内存信息,而只能使用 top 指令观察进程的动态内存总额。而且程序退出时,我们无法获知任何内存泄漏信息。为了更好的辅助在 linux 下程序开发,我们在我们的...

    linux下检测内存泄漏

    在 linux 或者 unix 下,我们的 C++ 程序缺乏相应的手段来检测内存信息,而只能使用 top 指令观察进程的动态内存总额。而且程序退出时,我们无法获知任何内存泄漏信息。为了更好的辅助在 linux 下程序开发,我们在...

     车载娱乐系统该项目使用Linux GEC6818开发板进行开发.zip

    在Linux的内核中,对输入设备的使用,实际上运用了3大块来管理,他们分别是所谓的输入设备驱动层、输入子系统核心层,以及事件触发层。他们各自的工作分别是: 输入设备驱动层: 每一种设备都有其特定的驱动程序,...

    linux设备驱动程序第三版

    1. Linux 设备驱动第三版 .................................................................................................................... 5 2. 第 1 章 设备驱动简介 ....................................

    Linux-operator-new-delete.rar_Operator Down_VC debug技巧_内存泄漏

    在 linux 或者 unix 下,我们的 C++ 程序缺乏相应的手段来检测内存信息,而只能使用 top 指令观察进程的动态内存总额。而且程序退出时,我们无法获知任何内存泄漏信息。为了更好的辅助在 linux 下程序开发,我们在...

    入门学习Linux常用必会60个命令实例详解doc/txt

    要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统。 不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个。这里笔者把比较重要和使用频率最多的命令...

    使用粤嵌GEC6818工程-智能语音家居系统.zip

    在Linux的内核中,对输入设备的使用,实际上运用了3大块来管理,他们分别是所谓的输入设备驱动层、输入子系统核心层,以及事件触发层。他们各自的工作分别是: 输入设备驱动层: 每一种设备都有其特定的驱动程序,...

    基于GEC6818项目的6818开发板的自动点餐系统.zip

    在Linux的内核中,对输入设备的使用,实际上运用了3大块来管理,他们分别是所谓的输入设备驱动层、输入子系统核心层,以及事件触发层。他们各自的工作分别是: 输入设备驱动层: 每一种设备都有其特定的驱动程序,...

    基于gec6818开发板实现的医疗服务系统 .zip

    在Linux的内核中,对输入设备的使用,实际上运用了3大块来管理,他们分别是所谓的输入设备驱动层、输入子系统核心层,以及事件触发层。他们各自的工作分别是: 输入设备驱动层: 每一种设备都有其特定的驱动程序,...

    基于ARM开发版(GEC6818)的电子点餐系统.zip

    在Linux的内核中,对输入设备的使用,实际上运用了3大块来管理,他们分别是所谓的输入设备驱动层、输入子系统核心层,以及事件触发层。他们各自的工作分别是: 输入设备驱动层: 每一种设备都有其特定的驱动程序,...

    计算机病毒与防护:Linux进程管理.pptx

    进程介绍 进程(Process)是程序的一个执行过程。进程需要占用各种系统资源,包括CPU、内存等,需要读写各类文件,调用各种...应用程序可通过对这些文件打开并读取(部分甚至还能通过写文件控制进程)来获取进程信息。

    实习周使用粤嵌GEC6818开发板做的一些小功能.zip

    在Linux的内核中,对输入设备的使用,实际上运用了3大块来管理,他们分别是所谓的输入设备驱动层、输入子系统核心层,以及事件触发层。他们各自的工作分别是: 输入设备驱动层: 每一种设备都有其特定的驱动程序,...

    基于 gec6818 的贪吃蛇项目,不一样的贪吃蛇哦.zip

    在Linux的内核中,对输入设备的使用,实际上运用了3大块来管理,他们分别是所谓的输入设备驱动层、输入子系统核心层,以及事件触发层。他们各自的工作分别是: 输入设备驱动层: 每一种设备都有其特定的驱动程序,...

    在GEC6818开发板中,实现一个模拟的钢琴游戏,通过手指弹奏发出相应的琴声 .zip

    在Linux的内核中,对输入设备的使用,实际上运用了3大块来管理,他们分别是所谓的输入设备驱动层、输入子系统核心层,以及事件触发层。他们各自的工作分别是: 输入设备驱动层: 每一种设备都有其特定的驱动程序,...

    基于GEC6818的数码相册,能够显示bmp图片,jpg图片,png图片.zip

    在Linux的内核中,对输入设备的使用,实际上运用了3大块来管理,他们分别是所谓的输入设备驱动层、输入子系统核心层,以及事件触发层。他们各自的工作分别是: 输入设备驱动层: 每一种设备都有其特定的驱动程序,...

    linux终端工具 putty

    PuTTY 是一套免费的 SSH / Telnet 程序,它可以连接上支持 SSH Telnet 联机的站台,并且可自动取得对方的系统指纹码 (Fingerprint)。建立联机以后,所有的通讯内容都是以加密的方式传输,因此你再也不用害怕使用 ...

    基于gec6818开发板的娱乐小平板项目 .zip

    在Linux的内核中,对输入设备的使用,实际上运用了3大块来管理,他们分别是所谓的输入设备驱动层、输入子系统核心层,以及事件触发层。他们各自的工作分别是: 输入设备驱动层: 每一种设备都有其特定的驱动程序,...

    使用GEC6818模拟物联网数据监控.zip

    在Linux的内核中,对输入设备的使用,实际上运用了3大块来管理,他们分别是所谓的输入设备驱动层、输入子系统核心层,以及事件触发层。他们各自的工作分别是: 输入设备驱动层: 每一种设备都有其特定的驱动程序,...

    基于OpenCV实现的人脸检测与识别demo,嵌入SANSUNG GEC6818 开发板.zip

    在Linux的内核中,对输入设备的使用,实际上运用了3大块来管理,他们分别是所谓的输入设备驱动层、输入子系统核心层,以及事件触发层。他们各自的工作分别是: 输入设备驱动层: 每一种设备都有其特定的驱动程序,...

    封装了包括 lcd 显示和触摸屏等通用功能的源码.zip

    在Linux的内核中,对输入设备的使用,实际上运用了3大块来管理,他们分别是所谓的输入设备驱动层、输入子系统核心层,以及事件触发层。他们各自的工作分别是: 输入设备驱动层: 每一种设备都有其特定的驱动程序,...

Global site tag (gtag.js) - Google Analytics