新闻  |   论坛  |   博客  |   在线研讨会
嵌入式Linux:获取系统信息
美男子玩编程 | 2024-08-21 17:03:48    阅读:92   发布文章

在Linux系统中,有多个函数可以用于获取系统信息,包括系统标识、系统配置、主机名等。这些函数包括uname、sysinfo、gethostname和sysconf。


  • uname:获取系统标识信息,包括操作系统名称、版本、硬件架构等。

  • sysinfo:获取系统整体运行信息,包括系统运行时间、内存使用情况、进程数等。

  • gethostname:获取主机名。

  • sysconf:获取系统配置参数,如处理器数量、页大小等。


1


uname函数


uname函数用于获取系统标识信息。


函数原型如下:


#include <sys/utsname.h>
int uname(struct utsname *buf);


参数

  • buf:指向struct utsname的指针,用于存储系统信息。



返回值


  • 成功时返回0。

  • 失败时返回-1,并设置errno来指示错误。



struct utsname 结构如下:


struct utsname {    char sysname[65];    /* 操作系统名称 */    char nodename[65];   /* 网络节点名称 */    char release[65];    /* 操作系统版本 */    char version[65];    /* 操作系统发布级别 */    char machine[65];    /* 硬件架构 */};



示例代码如下:




#include <stdio.h>#include <sys/utsname.h>
int main() {    struct utsname buf;
   if (uname(&buf) == -1) {        perror("uname");        return 1;    }
   printf("System name: %sn", buf.sysname);    printf("Node name: %sn", buf.nodename);    printf("Release: %sn", buf.release);    printf("Version: %sn", buf.version);    printf("Machine: %sn", buf.machine);
   return 0;}


2


sysinfo函数


sysinfo函数用于获取系统的整体运行信息。


函数原型如下:


#include <sys/sysinfo.h>
int sysinfo(struct sysinfo *info);


参数


  • info:指向struct sysinfo的指针,用于存储系统信息。


返回值


  • 成功时返回0。

  • 失败时返回-1,并设置errno来指示错误。



struct sysinfo 结构如下




struct sysinfo {long uptime; /* 系统启动后经过的时间(秒) */unsigned long loads[3]; /* 1分钟、5分钟和15分钟的平均负载 */unsigned long totalram; /* 总的物理内存(字节) */unsigned long freeram; /* 可用的物理内存(字节) */unsigned long sharedram; /* 共享的内存(字节) */unsigned long bufferram; /* 缓存的内存(字节) */unsigned long totalswap; /* 总的交换空间(字节) */unsigned long freeswap; /* 可用的交换空间(字节) */unsigned short procs; /* 当前进程数 */unsigned long totalhigh; /* 高位内存的总量(字节) */unsigned long freehigh; /* 可用的高位内存(字节) */unsigned int mem_unit; /* 内存单位大小(字节) */char _f[20-2*sizeof(long)-sizeof(int)]; /* 未使用的空间,留待将来使用 */};



示例如下:




#include <stdio.h>#include <sys/sysinfo.h>
int main() {    struct sysinfo info;
   if (sysinfo(&info) == -1) {        perror("sysinfo");        return 1;    }
   printf("Uptime: %ld secondsn", info.uptime);    printf("Total RAM: %lu bytesn", info.totalram);    printf("Free RAM: %lu bytesn", info.freeram);    printf("Process count: %dn", info.procs);
   return 0;}


3


gethostname函数


gethostname函数用于获取主机名。


函数原型如下:


#include <unistd.h>
int gethostname(char *name, size_t len);


参数


  • name:存储主机名的缓冲区。

  • len:缓冲区的大小。



返回值


  • 成功时返回0。

  • 失败时返回-1,并设置errno来指示错误。



示例如下:



#include <stdio.h>#include <unistd.h>
int main() {    char hostname[1024];
   if (gethostname(hostname, sizeof(hostname)) == -1) {        perror("gethostname");        return 1;    }
   printf("Hostname: %sn", hostname);    return 0;}


4


sysconf函数


sysconf函数用于获取与系统配置相关的信息,如处理器数量、页大小等。


函数原型如下:


#include <unistd.h>
long sysconf(int name);


参数

name:要查询的系统参数的名称。常见的参数包括:


  • _SC_CLK_TCK:时钟滴答数(每秒的滴答数)。

  • _SC_PAGE_SIZE:内存页大小(字节)。

  • _SC_PHYS_PAGES:物理内存页数。

  • _SC_AVPHYS_PAGES:可用物理内存页数。

  • _SC_NPROCESSORS_CONF:系统配置的处理器数。

  • _SC_NPROCESSORS_ONLN:当前可用的处理器数。


返回值


  • 成功时返回系统参数的值。

  • 失败时返回-1,并设置errno来指示错误。


示例如下:


#include <stdio.h>#include <unistd.h>
int main() {    long nprocs = sysconf(_SC_NPROCESSORS_ONLN);    long pagesize = sysconf(_SC_PAGE_SIZE);
   if (nprocs == -1 || pagesize == -1) {        perror("sysconf");        return 1;    }
   printf("Number of processors: %ldn", nprocs);    printf("Page size: %ld bytesn", pagesize);
   return 0;}


这些函数在系统编程中非常有用,可以帮助开发者获取有关系统环境和资源的详细信息,以便进行相应的管理和优化。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客