系统信息:uname,sysinfo,gethostname,sysconf

article/2025/9/25 17:36:51

image

且欲近寻彭泽宰,陶然共醉菊花怀。

文章目录

  • 系统信息
    • 系统标识 uname
    • sysinfo 函数
    • gethostname 函数
    • sysconf()函数

系统信息

系统标识 uname

系统调用 uname()用于获取有关当前操作系统内核的名称和信息,函数原型如下所示(可通过"man 2 uname"命令查看):

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

使用该函数需要包含头文件<sys/utsname.h>

函数参数和返回值含义如下:

bufstruct utsname 结构体类型指针,指向一个 struct utsname 结构体类型对象。
返回值:成功返回 0;失败将返回-1,并设置 errno

uname()函数用法非常简单,先定义一个 struct utsname 结构体变量,调用 uname()函数时传入变量的地址即可,struct utsname 结构体如下所示:

struct utsname {char sysname[]; /* 当前操作系统的名称 */char nodename[]; /* 网络上的名称(主机名) */char release[]; /* 操作系统内核版本 */char version[]; /* 操作系统发行版本 */char machine[]; /* 硬件架构类型 */
#ifdef _GNU_SOURCEchar domainname[];/* 当前域名 */
#endif
};

可以看到,struct utsname 结构体中的所有成员变量都是字符数组,所以获取到的信息都是字符串。

测试
编写一个简单地程序,获取并打印出当前操作系统名称、主机名、内核版本、操作系统发行版本以及处理器硬件架构类型等信息,测试代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <sys/utsname.h>
int main(void)
{struct utsname os_info;int ret;/* 获取信息 */ret = uname(&os_info);if (-1 == ret) {perror("uname error");exit(-1);}/* 打印信息 */printf("操作系统名称: %s\n", os_info.sysname);printf("主机名: %s\n", os_info.nodename);printf("内核版本: %s\n", os_info.release);printf("发行版本: %s\n", os_info.version);printf("硬件架构: %s\n", os_info.machine);exit(0);
}

运行结果:

sundp@sundongpeng:~/workspace/c_program/April$ gcc uname.c
sundp@sundongpeng:~/workspace/c_program/April$ ./a.out
操作系统名称: Linux
主机名: sundongpeng
内核版本: 4.15.0-29-generic
发行版本: #31~16.04.1-Ubuntu SMP Wed Jul 18 08:54:04 UTC 2018
硬件架构: x86_64

sysinfo 函数

sysinfo 系统调用可用于获取一些系统统计信息,其函数原型如下所示:

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

函数参数和返回值含义如下:

infostruct sysinfo 结构体类型指针,指向一个 struct sysinfo 结构体类型对象。
返回值:成功返回 0;失败将返回-1,并设置 errno

同样 sysinfo()函数用法也非常简单,先定义一个 struct sysinfo 结构体变量,调用 sysinfo()函数时传入变量的地址即可,struct sysinfo 结构体如下所示:

struct sysinfo {long uptime; /* 自系统启动之后所经过的时间(以秒为单位) */unsigned long loads[3]; /* 1, 5, and 15 minute load averages */unsigned long totalram; /* 总的可用内存大小 */unsigned long freeram; /* 还未被使用的内存大小 */unsigned long sharedram; /* Amount of shared memory */unsigned long bufferram; /* Memory used by buffers */unsigned long totalswap; /* Total swap space size */unsigned long freeswap; /* swap space still available */unsigned short procs; /* 系统当前进程数量 */unsigned long totalhigh; /* Total high memory size */unsigned long freehigh; /* Available high memory size */unsigned int mem_unit; /* 内存单元大小(以字节为单位) */char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding to 64 bytes */
};

测试

#include <stdio.h>
#include <stdlib.h>
#include <sys/sysinfo.h>int main(void)
{struct sysinfo sys_info;int ret;/* 获取信息 */ret = sysinfo(&sys_info);if (-1 == ret) {perror("sysinfo error");exit(-1);}/* 打印信息 */printf("uptime: %ld\n", sys_info.uptime);printf("totalram: %lu\n", sys_info.totalram);printf("freeram: %lu\n", sys_info.freeram);printf("procs: %u\n", sys_info.procs);exit(0);
}

运行结果:

sundp@sundongpeng:~/workspace/c_program/April$ gcc sysinfo.c
sundp@sundongpeng:~/workspace/c_program/April$ ./a.out
操作系统名称: Linux
主机名: sundongpeng
内核版本: 4.15.0-29-generic
发行版本: #31~16.04.1-Ubuntu SMP Wed Jul 18 08:54:04 UTC 2018
硬件架构: x86_64

gethostname 函数

此函数可用于单独获取 Linux 系统主机名,与 struct utsname 数据结构体中的 nodename 变量一样,gethostname 函数原型如下所示(可通过"man 2 gethostname"命令查看):

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

使用此函数需要包含头文件<unistd.h>

函数参数和返回值含义如下:

name:指向用于存放主机名字符串的缓冲区。
len:缓冲区长度。
返回值:成功返回 0,;失败将返回-1,并会设置 errno

测试:
使用 gethostname 函数获取系统主机名:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>int main(void)
{char hostname[20];int ret;memset(hostname, 0x0, sizeof(hostname));ret = gethostname(hostname, sizeof(hostname));if (-1 == ret) {perror("gethostname error");exit(ret);}puts(hostname);exit(0);
}

运行结果:

sundp@sundongpeng:~/workspace/c_program/April$ gcc gethostname.c
sundp@sundongpeng:~/workspace/c_program/April$ ./a.out
sundongpeng

sysconf()函数

sysconf()函数是一个库函数,可在运行时获取系统的一些配置信息,譬如页大小(page size)、主机名的最大长度、进程可以打开的最大文件数、每个用户 ID 的最大并发进程数等。其函数原型如下所示:

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

使用该函数需要包含头文件<unistd.h>
调用 sysconf()函数获取系统的配置信息,参数 name 指定了要获取哪个配置信息,参数 name 可取以下任何一个值(都是宏定义,可通过 man 手册查询):

⚫ _SC_ARG_MAX:exec 族函数的参数的最大长度,exec 族函数后面会介绍,这里先不管!
⚫ _SC_CHILD_MAX:每个用户的最大并发进程数,也就是同一个用户可以同时运行的最大进程数。
⚫ _SC_HOST_NAME_MAX:主机名的最大长度。
⚫ _SC_LOGIN_NAME_MAX:登录名的最大长度。
⚫ _SC_CLK_TCK:每秒时钟滴答数,也就是系统节拍率。
⚫ _SC_OPEN_MAX:一个进程可以打开的最大文件数。
⚫ _SC_PAGESIZE:系统页大小(page size)。
⚫ _SC_TTY_NAME_MAX:终端设备名称的最大长度。
⚫ ……

除以上之外,还有很多,这里就不再一一列举了,可以通过 man 手册进行查看,用的比较多的是_SC_PAGESIZE_SC_CLK_TCK,若指定的参数 name 为无效值,则 sysconf()函数返回-1,并会将 errno 设置为 EINVAL。否则返回的值
便是对应的配置值。注意,返回值是一个 long 类型的数据。

使用示例
获取每个用户的最大并发进程数、系统节拍率和系统页大小。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{printf("每个用户的最大并发进程数: %ld\n", sysconf(_SC_CHILD_MAX));printf("系统节拍率: %ld\n", sysconf(_SC_CLK_TCK));printf("系统页大小: %ld\n", sysconf(_SC_PAGESIZE));exit(0);
}

运行结果:

sundp@sundongpeng:~/workspace/c_program/April$ gcc sysconf.c
sundp@sundongpeng:~/workspace/c_program/April$ ./a.out
每个用户的最大并发进程数: 31581
系统节拍率: 100
系统页大小: 4096


http://chatgpt.dhexx.cn/article/RVMm1EWO.shtml

相关文章

Django-搭建sysinfo获取系统信息

文章目录 前言一、项目搭建二、主机信息监控三、Celery定时任务和异步任务 前言 使用Django&#xff0c;搭建sysinfo&#xff0c;Linux中,sysinfo是用来获取系统相关信息的结构体 本篇基于&#xff1a;https://github.com/hypersport/sysinfo#readme项目借鉴路径: https://gi…

SysInfo(电脑系统信息)0.0.0.1beta2

文件说明符 : D:\masm32\wmi\sysInfo\sysInfo0.0.0.1beta2.exe 属性 : A--- 数字签名:否 PE文件:是 语言 : 中文(简体&#xff0c;中国) 文件版本 : 0.0.0001 beta2 说明 : 电脑系统信息 版权 : PurpleEndurer 产品版本 : 0.0.0001 beta2 产品名称 : 电脑系统信息 公司名称 : P…

sysinfo函数、结构体使用

1&#xff0c;头文件&#xff1a; #include <sys/sysinfo.h>2&#xff0c;函数声明&#xff1a; int sysinfo(struct sysinfo *info);3&#xff0c;返回值&#xff1a; 成功返回0&#xff0c;错误返回-1&#xff1b; 4&#xff0c;sysinfo结构体名称 Linux 2.3.23(i38…

Linux中sysinfo的用法

sysinfo结构体 Linux中,可以用sysinfo来获取系统相关信息。 Linux中,sysinfo是用来获取系统相关信息的结构体。 函数声明和原型&#xff1a; #include <sys/sysinfo.h> int sysinfo(struct sysinfo *info); 在Linux中不同对版本结构体不一样 在Linux 2.3.16中&#…

sysinfo 函数

在linux系统中&#xff0c;我们可以使用sysinfo()获取一些系统统计信息。我们在终端命令行中输入“man 2 sysinfo”即可获取sysinfo()的详细信息&#xff0c;如下图所示。 从上图可以知道&#xff0c;使用uname需要包含头文件"#include <sys/sysinfo.h>" sysi…

natapp

简介 natapp是一个内网穿透工具&#xff0c;内网穿透也叫做内网映射&#xff0c;也叫“NAT穿透”&#xff0c;所谓内网穿透简单来说就是让外网能够访问内网&#xff0c;即把自己的电脑当服务器&#xff0c;让别人能够访问自己的电脑。 使用 1、注册一个账号&#xff0c;并且进…

WAP PUSH

PUSH &#xff08;WAP-PUSH&#xff09;又叫做服务信息或推入信息&#xff0c;是一种特殊格式的短信。 目录 基本简介 特点优势 系统框架 推送协议 推送服务方式 短消息网关简介 基于短信网关发送WAP PUSH wapPDU 模式 分析 良好前景 基本简介 特点优势 系统框架 推送协议 推送…

睡眠 应该用 a加权 c加权_时间加权平均价格算法(TWAP)和成交量平均算法(VWAP)在量化回测的应用...

本应用实践平台为BigQuant人工智能量化平台 为什么要引入TWAP和 VWAP&#xff1f; 为了评估策略的资金容量&#xff0c;我们对M.trade模块里买入点和卖出点这两个参数进行了更丰富的扩展&#xff0c;支持了策略能够按更丰富的算法交易价格&#xff08;WAP&#xff09;进行撮合。…

【Java使用pushy(com.eatthepath)对接APns消息推送(基于HTTP/2协议)】

Java使用pushy(com.eatthepath)对接APns消息推送(基于HTTP/2协议) 需要IOS开发提供的信息 1.推送证书,.p8格式的文件 2.bundleId 3.keyId 4.teamId MAVEN依赖 <dependency><groupId>com.eatthepath</groupId><artifactId>pushy</artifactId>…

HTAP 简介

2019独角兽企业重金招聘Python工程师标准>>> HTAP的定义 数据库系统一般可以按照负载类型分成操作型数据库(Operational Support System)和决策型数据库(Decision Support System)。操作型数据库主要用于应对日常流水类业务,主要是面向消费者类的业务;决策型数…

爬取twitter数据--使用twint

最近因为实验验证的需要&#xff0c;想要爬取推特的数据&#xff0c;首先想到的是通过推特官方的开发者计划拿到key然后直接爬取&#xff0c;连接如下&#xff1a; twitter myapp 但是问题就在于&#xff0c;这玩意我用两个号申请都被拒绝了&#xff0c;据说是86的号码被拒就是…

tweepy抓取Twitter数据

Tweepy是Twitter官方提供的Python第三方开发库&#xff0c;简单好用易学高效&#xff01; 安装的流程很简单&#xff0c;如果你和我一样的win10_64bit用户&#xff0c;如果你配置了pip管理器&#xff0c;在你的终端里输入 >> pip install tweepy 就会自动安装好了 我们先…

【PWA学习】4. 使用 Push API 实现消息推送

引言 在接下来的内容里&#xff0c;我们会探究 PWA 中的另一个重要功能——消息推送与提醒(Push & Notification)。这个能力让我们可以从服务端向用户推送各类消息并引导用户触发相应交互 Web Push 效果 Push API 和 Notification API 其实是两个独立的技术&#xff0c;完全…

TWAMP 协议

使用标准协议测量IP网络性能始终是一项挑战。IP发明者曾作为TCP/IP协议套件的一部分提供了一些工具,如Internet控制消息协议(ICMP)Ping、Traceroute和用户数据报协议(UDP)Echo。但是,这些工具并不是为执行总体性能测试而准备的,而是设计用于简单排查IP网络故障。因此,企…

HTAP技术

传统业务采取隔天隔天将数据抽取到OLAP的方式&#xff0c;带来了两个问题 1&#xff0c; 报表往往需要隔天才能出来&#xff0c;无法满足业务需要&#xff1b; 2&#xff0c;带来了多副本的问题&#xff1b; OLTP里面至少三个副本&#xff1b; OLAP里面又至少3个副本&#xf…

【区块链 | Uniswap】3.剖析DeFi交易产品之Uniswap:V2下篇

前言 上篇我们主要讲了 UniswapV2 整体分为了哪些项目&#xff0c;并重点讲解了 uniswap-v2-core 的核心代码实现&#xff1b;中篇主要对 uniswap-v2-periphery 的路由合约实现进行了剖析&#xff1b;现在剩下 V2 系列的最后一篇&#xff0c;我会介绍剩下的一些内容&#xff0…

量化交易中VWAP/TWAP算法的基本原理和简单源码实现(C++和python)

参考文献&#xff1a; https://en.wikipedia.org/wiki/Time-weighted_average_price https://en.wikipedia.org/wiki/Volume-weighted_average_price http://blog.sina.com.cn/s/blog_163a2b9700102wdy0.html https://www.douban.com/note/214362575 算法交易其实主要是用在…

用高频交易的方式对TWAP算法优化(TWAP算法、算法实现、高频交易、冰山算法)

用高频交易的方式对TWAP算法进行优化。 以下内容主要基于执行算法的讨论。 什么是TWAP算法&#xff08;时间加权平均价格&#xff09;&#xff1f; TWAP交易时间加权平均价格Time Weighted Average Price 模型是把一个母单的数量平均地分配到一个交易时段上。该模型将交易时…

算法交易简介以及TWAP、VWAP算法原理

算法交易视频&#xff1a;算法交易视频 1&#xff0c;交易成本&#xff1a; 交易成本分成两类&#xff0c;一类是显性成本&#xff0c;包括佣金&#xff08;包括券商佣金&#xff08;券商收取&#xff09;&#xff0c;交易经手费&#xff08;交易所收取&#xff0c;千分之0.0…

时间加权平均价格算法(TWAP)和成交量平均算法(VWAP)在量化回测的应用

为什么要引入TWAP和 VWAP&#xff1f; 为了评估策略的资金容量&#xff0c;我们对M.trade模块里买入点和卖出点这两个参数进行了更丰富的扩展&#xff0c;支持了策略能够按更丰富的算法交易价格&#xff08;WAP&#xff09;进行撮合。 如果资金是10万的话&#xff0c;那么在开…