linux用c语言获取系统启动时长

思路是通过读取/proc/uptime获得系统启动时长。

使用命令cat /proc/uptime

通过man proc可以看到如下的信息:

/proc/uptime:This file contains two numbers: the uptime of the system (seconds), and the amount of time spent in idle process (seconds).

第一个是系统的启动时长,第二个是系统的空闲时间。两个的单位都是秒。

#include <stdio.h>
#include <string.h>
#include <sys/time.h>
#include <stdlib.h>

struct timeval timeget(void)
{
    struct timeval now;
    unsigned char  timestr[60] = {0};
    unsigned char  uptimestr[30] = {0};
    unsigned char * dotaddr;
    unsigned long second;
    char error = 0;
    FILE * timefile = NULL;

    timefile = fopen("/proc/uptime", "r");
    if(!timefile)
    {
        printf("[%s:line:%d] error opening ‘/proc/uptime‘",__FILE__,__LINE__);
        error = 1;
        goto out;
    }

    if( (fread(timestr, sizeof(char), 60, timefile)) == 0 )
    {
        printf("[%s:line:%d] read ‘/proc/uptime‘ error",__FILE__,__LINE__);
        error = 1;
        goto out;
    }

    dotaddr = strchr(timestr, ‘.‘);
    if((dotaddr - timestr + 2) < 30)
        memcpy(uptimestr, timestr, dotaddr - timestr + 2);
    else
    {
        printf("[%s:line:%d] uptime string is too long",__FILE__,__LINE__);
        error = 1;
        goto out;
    }
    uptimestr[dotaddr - timestr + 2] = ‘\0‘;

out:
    if(error)
    {
        now.tv_sec  = 0;
        now.tv_usec = 0;
    }
    else
    {
        now.tv_sec  = atol(uptimestr);
        now.tv_usec = 0;
    }

    fclose(timefile);
    return now;
}

int main()
{
    struct timeval uptime;

    uptime = timeget();
    printf("uptime = %lu\n", uptime.tv_sec);
    return 0;
}

运行结果:

时间: 2024-10-25 20:33:36

linux用c语言获取系统启动时长的相关文章

Android系统启动时的apk安装过程

1.前言 在Android系统启动的过程中,系统会通过PackageManagerService来扫描特定的目录,以便可以对保存在里面的apk进行安装.PackageManagerService主要做两件事情: - 解析这个apk的配置文件AndroidManifest.xml以便获得它的安装信息 - 为这个apk分配Linux用户ID和用户组ID以便apk在系统中可以获取到合适的运行权限 下面我们来开始分析PackageManagerService是如何安装apk并执行上面两件事情的 2.源码

谈谈Android系统启动时的那点事儿

Android系统完整的启动过程,从系统层次角度可分为Linux系统层.Android系统服务层.Zygote进程模型三个阶段:从开机到启动Home Launcher完成具体的任务细节可分为七个步骤,下面就从具体的细节来解读Android系统完整的初始化过程. 一.启动BootLoader Android 系统是基于Linux操作系统的,所以它最初的启动过程和Linux一样.当设备通电后首先执行BootLoader引导装载器,BootLoader是在操作系统内核运行之前运行的一段小程序.通过这段

Linux基础篇之三系统启动过程

Linux 系统启动过程 Linux系统启动时,我们会看到许多启动信息,其实过程并不复杂,大致可以分为6个阶段: ·内核的引导 ·运行init ·运行级别 ·系统初始化 ·建立终端 ·用户登录系统 内核引导 当计算机打开电源后,首先是BIOS的开机自检,按照BIOS设置第一启动项来启动,默认一般是硬盘启动. 操作系统接管硬件,之后读入/boot目录下的内核文件. 运行init init进程是系统所有进程的起点,是系统所有进程中的父进程,也是系统启动时第一个需要启动的进程.没有这个进程,系统的其他

scala实战之spark用户在线时长和登录次数统计实例

接触spark后就开始学习scala语言了,因为有一点python和java的基础学习起来还行,今天在这里把我工作中应用scala编程统计分析用户行为日志的实例和大家分析一下,我这里主要讲一下用户的在线时长统计和登录次数统计算法实现过程. 第一步 编程环境:首先你得有spark安装包 你可以先不用本地安装spark,但是可以通过import spark-assembly-1.6.2-hadoop2.6.0.jar包来完成程序调试 另外需要scala的运行环境,我用的版本:scala-sdk-2.

andriod编程中如何获取一段语音的时长?

在android有关语音的应用中,我们可能需要录音的长度,这个长度很好获取,只要在刚刚开始录音的时候获取本地时间,录音结束的时候获取本地时间,之后一减就可以得到他的时间长度. 代码:first = (int)(System.currentTimeMillis()/1000);//当点击录音的时候获取本地时间,除以1000得到时间单位是秒,否则是毫秒. second = (int)(System.currentTimeMillis()/1000);//录音结束的时候获取本地时间         

linux通过ntpdate网络校时

目前 Linux 系统上面有两个时间喔,一个是 Linux 系统,另一个则是 BIOS 时间(真正的硬件记录的时间)! 我们可以使用 date 这个指令来手动修正目前主机的时间,不过, date 这个指令仅修正 Linux 时间而已,我们还需要以 hwclock 这个指令来将 BIOS 时间也更新才行! hwclock [-rw]     -r:查看现有BIOS时间     -w:将现在的linux系统时间写入BIOS中 当我们进行完 Linux 时间的校时后,还需要以 hwclock -w 来

【Android端 APP 启动时长获取】启动时长获取方案及具体实施

一.什么是启动时长? 1.启动时长一般包括三种场景,分别是:新装包的首次启动时长,冷启动时长.热启动时长 冷启动 和 热启动 : (1)冷启动:当启动应用时,后台没有该程序的进程,此时启动的话系统会分配一个新的进程给应用. (2)热启动:程序的进程依然存在,启动时通过已有进程启动进入到Activity显示页面的,就是热启动,或者从Android官网来看我们获取到的其实是温启动时长,就是Activity不存在的情况. (3)新装包的启动时长: 新装包的启动时长,预估是最长的,并且在5.0以下及5.

LK按作业执行时长优化

新到一家公司,需要折腾点认可出来.然后开始苦逼的优化工作.暂时不吐槽权限问题!!!优化效果优化前,作业历史记录(前30)P图优化前,CPU使用情况有几个作业平均时长2.5~3.5小时,还有很多时长在半小时以上的作业,基本要到11-12点才能完成作业统计.CPU每天7:00-11:00一直维持在比较高的数值.优化后,作业历史记录(前30)P图最近三天的CPU情况最近一天的CPU情况优化后,作业执行时长明显降低,从最近3天执行情况看,9:00前统计作业能够执行完成.服务器CPU高峰时段由之前的7:0

节拍时长

1. BPM:表示每分钟多少拍,比如:BPM = 120表示每分钟有2拍. 2. BPS:表示每秒多少拍,公式为:BPS = BPM / 60,比如:BPM = 120,则 BPS = 120 / 60 = 2,即每秒2拍. 3. OBT:表示1拍时间长度(时值),公式为:OBT = 60 / BPM,比如:BPM = 120,则 OBT = 60 / 120 = 0.5S. 4. NCV:表示音分值,在一拍中,有一个或多个音符,它们按比例占据一拍时长,一个完整的音符为4分音符,固定4分音符为一