Get the boot time in objective c

前端 未结 2 930
时光说笑
时光说笑 2020-12-30 18:59

how can i get the boot time of ios in objective c ?

Is there a way to get it?

相关标签:
2条回答
  • 2020-12-30 19:21

    I took JeremyP's answer, gave the result the full microsecond precision, clarified the names of local variables, improved the order, and put it into a method:

    #include <sys/types.h>
    #include <sys/sysctl.h>  
    
    // ....  
    
    + (nullable NSDate *)bootDate
    {
        // nameIntArray and nameIntArrayLen
        int nameIntArrayLen = 2;
        int nameIntArray[nameIntArrayLen];
        nameIntArray[0] = CTL_KERN;
        nameIntArray[1] = KERN_BOOTTIME;
    
        // boot_timeval
        struct timeval boot_timeval;
        size_t boot_timeval_size = sizeof(boot_timeval);
        if (sysctl(nameIntArray, nameIntArrayLen, &boot_timeval, &boot_timeval_size, NULL, 0) == -1)
        {
            return nil;
        }
    
        // bootSince1970TimeInterval
        NSTimeInterval bootSince1970TimeInterval = (NSTimeInterval)boot_timeval.tv_sec + ((NSTimeInterval)boot_timeval.tv_usec / 1000000);
    
        // return
        return [NSDate dateWithTimeIntervalSince1970:bootSince1970TimeInterval];
    }
    
    0 讨论(0)
  • 2020-12-30 19:31

    Don't know if this will work in iOS, but in OS X (which is essentially the same OS) you would use sysctl(). This is how the OS X Unix utility uptime does it. Source code is available - search for "boottime".

    #include <sys/types.h>
    #include <sys/sysctl.h>  
    
    // ....  
    
    #define MIB_SIZE 2  
    
    int mib[MIB_SIZE];
    size_t size;
    struct timeval  boottime;
    
    mib[0] = CTL_KERN;
    mib[1] = KERN_BOOTTIME;
    size = sizeof(boottime);
    if (sysctl(mib, MIB_SIZE, &boottime, &size, NULL, 0) != -1)
    {
        // successful call
        NSDate* bootDate = [NSDate dateWithTimeIntervalSince1970:boottime.tv_sec];
    }
    

    The restricted nature of programming in the iOS sandboxed environment might make it not work, I don't know, I haven't tried it.

    0 讨论(0)
提交回复
热议问题