Linux下system_uptime函数

ReMeppo 2012-02-07 10:39:56
看这个函数有点头晕, 哪位热心的大哥大姐帮解释解释... 感激不尽

#define WRAPAROUND_VALUE (0xffffffffUL / HZ + 1) /* HZ = frequency of ticks
per second. */

/* Static function to get current sec and usec. */
static int
system_uptime (struct pal_timeval *tv, struct pal_tzval *tz)
{
struct sysinfo info;
static unsigned long prev = 0;
static unsigned long wraparound_count = 0;
unsigned long uptime;
static long base = 0;
static long offset = 0;
long leap;
long diff;

/* Get sysinfo. */
if (sysinfo (&info) < 0) //得到系统信息包括启动时间
return RESULT_ERROR;

/* Check for wraparound. */
if (prev > info.uptime)
wraparound_count++; //这个有什么用? 这个count是代表什么, 这里表达意思是什么? 怎么样count才++

/* System uptime. */
uptime = wraparound_count * WRAPAROUND_VALUE + info.uptime; //这里算的是什么?
prev = info.uptime;

/* Get tv_sec and tv_usec. */
gettimeofday (tv, tz);

//下面一连串的调整 都不知道是什么意思了. 几个静态变量和临时变量混和在一起...
/* Deffernce between gettimeofday sec and uptime. */
leap = tv->tv_sec - uptime;

/* Remember base diff for adjustment. */
if (! base)
base = leap;

/* Basically we use gettimeofday's return value because it is the
only way to get required granularity. But when diff is very
different we adjust the value using base value. */
diff = (leap - base) + offset;

/* When system time go forward than 2 sec. */
if (diff > 2 || diff < -2)
offset -= diff;

/* Adjust second. */
tv->tv_sec += offset;

return RESULT_OK;
}
...全文
464 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ReMeppo 2012-02-14
  • 打赏
  • 举报
回复
帅得不敢出门 2012-02-11
  • 打赏
  • 举报
回复
WRAPAROUND_VALUE (0xffffffffUL / HZ + 1) 溢出一次需要的时间

/* Check for wraparound. */
if (prev > info.uptime)
wraparound_count++; //溢出一次 wraparound_count++

/* System uptime. */
uptime = wraparound_count * WRAPAROUND_VALUE + info.uptime; 所有溢出时间相加+info.uptime就是总uptime
prev = info.uptime;

// 溢出的例子 比如总量为10 ,此时prev = 10 那么info.uptime为 1而不是11,此时prev > info.uptime
那么此时wraparound_count=1 ,然后再算出现在的uptime

下面的代码都有英文注释,我就不解释了。
ReMeppo 2012-02-10
  • 打赏
  • 举报
回复
ReMeppo 2012-02-08
  • 打赏
  • 举报
回复
没人??? 自己顶个
ReMeppo 2012-02-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liv2005 的回复:]

先提出具体问题,再要求解答吧....

不然就好像在说,数学咱不懂,谁给讲下?
[/Quote] 问题不在代码里的注释里面了么...
Liv2005 2012-02-07
  • 打赏
  • 举报
回复
先提出具体问题,再要求解答吧....

不然就好像在说,数学咱不懂,谁给讲下?
Re: 《Linux 系统管理命令》 ---------------------------------------内容提要: 01/20)命令lsof          :查看进程打开的文件02/20)命令uptime     :显示系统的运行时间及负载03/20)命令free          :查看系统内存信息04/20)命令iftop         :动态显示网络接口流量信息05/20)命令vmstat      :虚拟内存统计06/20)命令mpstat      :CPU信息统计07/20)命令iostat        :I/O信息统计08/20)命令 iotop        :动态显示磁盘 I/O 统计信息09/20)命令 sar            :收集系统信息10/20)命令 chkconfig :管理开机服务11/20)命令 ntsysv       :管理开机服务12/20)命令 setup        :系统管理工具13/20)命令 ethtool      :查询网卡参数14/20)命令 mii-tool     :管理网络接口的状态15/20)命令 dmidecode:查询系统硬件信息16/20)命令 lspci           :显示所有PCI设备17/20)命令 ipcs            :显示进程间通信设施的状态18/20)命令ipcrm          :清除ipc相关信息19/20)命令rpm             :RPM包管理器20/20)命令yum             :自动化RPM包管理工具  本人在教学和实战过程中发现,即便是有一定运维经验的人,可能已经能够搭建一定复杂度的Linux架构,但是在来来回回的具体操作中,还是体现出CLI(命令界面)功底不够扎实,甚至操作的非常‘拙’、处处露‘怯’。 对一个士兵来说,枪就是他的武器,对于一个程序员来说,各种library(工具库)就是他的武器;而对于Linux运维人员来说,无疑命令行工具CLI(命令界面)就是他们的武器;高手和小白之间的差距往往就体现在对于这些“武器”的掌握和熟练程度上。有时候一个参数就能够解决的事情,小白们可能要写一个复杂的Shell脚本才能搞定,这就是对CLI(命令界面)没有理解参悟透彻导致。 研磨每一个命令就是擦拭手中的作战武器,平时不保养不理解,等到作战的时候,一定不能够将手中的武器发挥到最好,所以我们要平心、静气和专注,甘坐冷板凳一段时间,才能练就一身非凡的内功! 本教程从实战出发,结合当下流行或最新的Linux(v6/7/8 版本)同时演示,将命令行结合到解决企业实战问题中来,体现出教学注重实战的务实精神,希望从事或未来从事运维的同学,能够认真仔细的学完Linux核心命令的整套课程。 本课程系列将逐步推出,看看我教学的进度和您学习的步伐,孰占鳌头! 注:关于教学环境搭建,可以参考本人其它课程系列,本教学中就不再赘述! 《参透 VMware 桌面级虚拟化》 《在虚拟机中安装模版机(包括应用软件等)》 《SecureCRT 连接 GNS3/Linux 的安全精密工具》 

23,127

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧