目录

1、uname函数

2、sysinfo函数

3、gethostname函数

4、sysconf函数


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

  • 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: %s\n", buf.sysname);
    printf("Node name: %s\n", buf.nodename);
    printf("Release: %s\n", buf.release);
    printf("Version: %s\n", buf.version);
    printf("Machine: %s\n", 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 seconds\n", info.uptime);
    printf("Total RAM: %lu bytes\n", info.totalram);
    printf("Free RAM: %lu bytes\n", info.freeram);
    printf("Process count: %d\n", 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: %s\n", 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: %ld\n", nprocs);
    printf("Page size: %ld bytes\n", pagesize);

    return 0;
}

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

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐