Linux运行了多久?&&gettimeofday()的用法

(1)查看时钟中断:
$ cat /proc/interrupts
           CPU0
  0:    1380471    IO-APIC-edge  timer
  1:       3626       IO-APIC-edge  i8042
  7:          0          IO-APIC-edge  parport0
  8:          3          IO-APIC-edge  rtc
  9:          1          IO-APIC-level  acpi
 14:      39229     IO-APIC-edge  libata
 15:      39999     IO-APIC-edge  libata
169:     244640   IO-APIC-level  uhci_hcd:usb2
177:          2        IO-APIC-level  uhci_hcd:usb1, ehci_hcd:usb5
185:          0        IO-APIC-level  uhci_hcd:usb3
193:     410350   IO-APIC-level  uhci_hcd:usb4, i915@pci:0000:00:02.0
201:     251593   IO-APIC-level  Intel ICH7
209:     148723   IO-APIC-level  eth0
NMI:          0
LOC:    1380276
ERR:          0
MIS:          0
第一列就是时钟中断号,第二列表示中断次数,第四列是时钟源名称。由于时钟中断是有一定频率的,那么根据这个值可以知道系统运行了多久。时钟中断的频率在Linux中称为节拍tick。用下面这个命令查看当前系统配置的节拍数,在自己的ubuntu下执行:

$cd /boot;

$cat config-2.6.28-17-generic|grep '^CONFIG_HZ',回显:

$CONFIG_HZ=250
一秒有250个时钟中断,那么运行了1380471/250=5521.88s。补充说明:

A,cat /proc/interrupts在我自己的ubuntu里面运行,会显示两个CPU结果(双核),但中断次数固定在163,由此怀疑此方法是不是不适合双核电脑。

B,在ubuntu系统中,/boot的目录下的config-2.6.28-17-generic是系统的宏定义配置文件,相当于MID上的autoconf.h。

C,管道的应用也即在前面cat的文件结果中搜寻带特定字符串的语句,如果不带^,则在结果中会把#屏蔽的语句一起显示。

(2)查看/proc文件:
$ cat        /proc/uptime
5863.73     4889.31
第一个数值表示系统总启动时间,第二个数值表示系统空闲时间,单位都是秒。空闲比例为4889.31/5863.73=83.38%,还是比较闲的。
(3)uptime命令:
$ uptime
17:12:47 up  1:38,  8 users,  load average: 0.94, 0.51, 0.47
分别表示分别表示该指令启动时刻、状态、系统已运行总时间、用户数、过去1、5、15分钟的负载平衡。
(4)通过gettimeofday获取系统时间,首先熟悉下面结构体

struct timeval {
       time_t      tv_sec;     /* seconds */
      suseconds_t tv_usec;    /* microseconds */
};

timeval表示一个时间点,比如:timeval.tv_sec = 1   (s),timevat.tv_usec = 500 000 (μs),则1s500000μs = 1.5s。注意:millisecond 毫秒;microsecond 微秒。一个实例如下:

[cpp]  view plain copy
  1. #include <stdio.h>  
  2. #include <sys/time.h>  
  3. #include <time.h>  
  4.   
  5. int main(int argc, char * argv[]){  
  6.   
  7.     struct timeval tv;                //(1)  
  8.     while(1){  
  9.         gettimeofday(&tv, NULL);      //(2)  
  10.         printf("time %u:%u\n", tv.tv_sec, tv.tv_usec);  
  11.         sleep(2);  
  12.     }  
  13.     return 0;  
  14.   
  15. }  


每隔两秒显示系统时间。结果是:



参考原文:http://blog.csdn.net/blackbillow/archive/2009/01/23/3850170.aspx

参考原文: http://hi.baidu.com/zengzhaonong/item/9a3fff2f92b82bd50e37f950
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值