最近在做windows->linxu的跨平台代码迁移,也算是初次接触linux吧。大学时候学过一些,到如今再上手的时候就只记得ls这么一个命令了。踩了一些坑在这里做个记录,留给以后的自己也留给又需要的人;想直接看解决方案,可以跳过前面只看解决方案二;
问题:我们的程序需要获取操作系统的启动时间;在window下面直接用了boost的库,但是在迁移的时候发现三方库不能用了,原因应该是编译的时候少加了一些宏定义;
解决方案一:
因为boost里面有这部分实现,所以没有找直接把boost的linux版本实现拷贝过来,具体实现就不写了;运行多次之后发现确实是每次运行都取到相同的值,以为成功了;但是后来发现,即使系统重启之后还是那个值,所以这个方案行不通;boost的源码直接运行居然都不行,可能还是用的不对吧。这个坑以后再深挖一下;
解决方案二:
方案一失败之后,直接采集系统信息,直接上代码吧;另外这个方法有一个弊端,精确度只能达到分钟级别,秒级每次启动可能会有一秒左右的误差,所以下面给出的代码只给到分钟级别;
#include <sys/sysctl.h>
#include <sys/sysinfo.h>
#include <time.h>
#include <error.h>
#include <stdio.h>
#include <sstream>
#include <iostream>
std::string get_boot_time()
{
struct sysinfo info;
time_t