博客专栏

EEPW首页 > 博客 > 嵌入式Linux:获取系统信息

嵌入式Linux:获取系统信息

发布人:美男子玩编程 时间:2024-08-21 来源:工程师 发布文章

在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;}


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

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



关键词: 嵌入式 Linux

相关推荐

技术专区

关闭