歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux系統中如何通過程序來獲知系統信息

Linux系統中如何通過程序來獲知系統信息

日期:2017/2/28 16:06:18   编辑: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];

char version[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>

int gethostname(char *name,size_t len);

3>函數形參

Ø name:接收緩沖區。

Ø len:接收緩沖區的最大長度

4>函數返回值

如果函數執行成功,則返回零;如果發生錯誤則返回-1。錯誤號存放在外部變量errno中。

2.getdomainname()函數

1>函數功能

可以允許主機獲得程序正在運行的主機的NIS域名。

2>函數原型

#include<unistd.h>

int getdomainname(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;

}

Copyright © Linux教程網 All Rights Reserved