The sysinfo system call returns a lot of useful system statistic data: memory usage, number of currently running processes, seconds since last boot. The only argument used by sysinfo is a pointer to a sysinfo structure. The first member of sysinfo structure is uptime which contains number of seconds since last reboot. For more details about sysinfo structure use man command: ‘man sysinfo’. Below presented c++ code which takes uptime and convert it to date and time string.
The output of the application is:
# ./reboottime Last reboot date and time: 2018-02-26 08:08:58 |
c++ Code:
#include <stdio.h> #include <time.h> #include <string.h> #include <sys/times.h> #include <sys/sysinfo.h> int main(int, char **) { char szBuffer[32]; struct sysinfo sys_info; sysinfo(&sys_info); // printf("Second after last reboot: %llu\n", (unsigned long long)sys_info.uptime); time_t currentTime = time(NULL); // printf("Current Time: %llu\n", (unsigned long long)currentTime); time_t rebootTime = currentTime - sys_info.uptime; struct tm * tmrebootTime = localtime(&rebootTime); memset(szBuffer,0,32); strftime(szBuffer, sizeof(szBuffer), "%Y-%m-%d %H:%M:%S", tmrebootTime); // convert reboot Unix time to string printf("Last reboot date and time: %s\n", szBuffer); return 0; }