相关需要总结的点:
- 采用multimap进行扫描,采用queue进行存放,这样一个选型路径的演变过程
- 最开始同步 glog 0.5.0 中的方法,但发现其比较复杂,同时 专注 保留天数和文件个数,发现并不需要天数了,只要个数 + 个数的大小进行限制就能解决这个问题
- 后面采用 multimap 进行存放,但由于不想 遍历 dir,所以在write中 scan一次,也导致了问题(写的时候会添加进map中,但scan时又会添加一次,但multimap支持这样的情况,即如下代码:)
- 再后面代码review时提出的新方案「采用multimap进行扫描,采用queue进行存放、弹出」
- 在设计时想到了 优先级队列(重载比较函数),这种拆分的方法没想到,一定程度上说,充分的利用了两者的优点,非常好的点
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
multimap<int, string> map_test;
map_test.emplace(1, "hello");
map_test.emplace(1, "world");
map_test.emplace(1, "hello");
map_test.emplace(2, "hello");
cout << "map size = " << map_test.size() << endl;
for (const auto &it : map_test)
{
cout << "\t" << it.first << " : " << it.second << endl;
}
return 0;
}
输出结果为:
- 调用 LOG(EOOR) 出现死锁问题
- scan中pid错误的问题
- kill进程时出现的
defunct
状态 - lstat、stat 的使用
- stat统计软连接时踩过的坑
fwrite
判断情况- 错误码打印方法(errorno的具体错误)
- 使用strerror() 或 perror,可参考 【How to know what the ‘errno’ means?】