博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux获取系统启动时间
阅读量:6848 次
发布时间:2019-06-26

本文共 2069 字,大约阅读时间需要 6 分钟。

1、前言

  时间对操作系统来说非常重要,从内核级到应用层,时间的表达方式及精度各部相同。linux内核里面用一个名为jiffes的常量来计算时间戳。应用层有time、getdaytime等函数。今天需要在应用程序获取系统的启动时间,百度了一下,通过sysinfo中的uptime可以计算出系统的启动时间。

2、sysinfo结构

  sysinfo结构保持了系统启动后的信息,主要包括启动到现在的时间,可用内存空间、共享内存空间、进程的数目等。man sysinfo得到结果如下所示:

1 struct sysinfo { 2                long uptime;             /* Seconds since boot */ 3                unsigned long loads[3];  /* 1, 5, and 15 minute load averages */ 4                unsigned long totalram;  /* Total usable main memory size */ 5                unsigned long freeram;   /* Available memory size */ 6                unsigned long sharedram; /* Amount of shared memory */ 7                unsigned long bufferram; /* Memory used by buffers */ 8                unsigned long totalswap; /* Total swap space size */ 9                unsigned long freeswap;  /* swap space still available */10                unsigned short procs;    /* Number of current processes */11                char _f[22];             /* Pads structure to 64 bytes */12            };

3、获取系统启动时间

  通过sysinfo获取系统启动到现在的秒数,用当前时间减去这个秒数即系统的启动时间。程序如下所示:

1 #include 
2 #include
3 #include
4 #include
5 6 static int print_system_boot_time() 7 { 8 struct sysinfo info; 9 time_t cur_time = 0;10 time_t boot_time = 0;11 struct tm *ptm = NULL;12 if (sysinfo(&info)) {13 fprintf(stderr, "Failed to get sysinfo, errno:%u, reason:%s\n",14 errno, strerror(errno));15 return -1;16 }17 time(&cur_time);18 if (cur_time > info.uptime) {19 boot_time = cur_time - info.uptime;20 }21 else {22 boot_time = info.uptime - cur_time;23 }24 ptm = gmtime(&boot_time);25 printf("System boot time: %d-%-d-%d %d:%d:%d\n", ptm->tm_year + 1900,26 ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec);27 return 0; 28 }29 30 int main()31 {32 if (print_system_boot_time() != 0) {33 return -1;34 }35 return 0;36 }

测试结果如下所:

转载于:https://www.cnblogs.com/Anker/p/3527609.html

你可能感兴趣的文章
区块链100讲:以太坊Solidity函数的external/internal,public/private区别
查看>>
php 数据导出
查看>>
js-(枚举,自身,继承,Symbol,Iterator)口诀
查看>>
一行核心代码做出类似tableViewHeaderView和AppStore里的ScrollView悬浮条效果
查看>>
SSM项目遇到的问题(三)
查看>>
有没有好上手的可视化分析软件?
查看>>
git windows 安装 - Github同步 / Vscode源代码管理:Git 安装操作
查看>>
机器学习(3)——信息论基础(熵的介绍)
查看>>
编写一个统计字符串中每个连续字符个数的函数,如 `aaabbcccaabcd` 输出为`3a2b3c2a1b1c1d`...
查看>>
在 React 中处理数据流问题的一些思考
查看>>
阿里面试题BIO和NIO数量问题附答案和代码
查看>>
测者的测试技术手册:揭开java method的一个秘密--巨型函数
查看>>
Vue CLI 3.x开发环境搭建
查看>>
小白学python系列-(1)环境的安装
查看>>
简单梳理Redux的源码与运行机制
查看>>
小猿圈解读Python前景真有这么好?
查看>>
写一个小程序版的axios
查看>>
Tomcat配置
查看>>
Spring Cloud自定义引导属性源
查看>>
Android之UI学习篇六:ImageView实现图片旋转和缩放
查看>>