C++倒序读取文件内容
需求:需要对系统日志进行监控,获取增量日志
获取文件最后一行内容
// 获取上一行行尾位置
int MovetoLineStart(std::fstream* fs) {
fs->seekg(-1, std::ios_base::cur);
for (int i = fs->tellg(); i > 0; i--) {
if (fs->peek() == '\n') {
fs->get();
return i;
}
fs->seekg(i, std::ios_base::beg);
}
return -1;
}
// 获取文件最后一行
std::string GetLastLine(std::fstream* fs) {
// Go to the last character before EOF
fs->seekg(-1, std::ios_base::end);
if (MovetoLineStart(fs) < 0) {
fs->close();
return "";
}
std::string lastline = "";
getline(*fs, lastline);
fs->close();
return lastline;
}
int main() {
std::fstream fs("/var/log/syslog", std::ios::in);
std::cout << GetLastLine(&fs) << "\n";
}
文件从后向前读取10行
void GetLinesReverse(std::fstream* fs) {
// Go to the last character before EOF
fs->seekg(-1, std::ios_base::end);
int pos = MovetoLineStart(fs);
int count = 10;
std::string lastline = "";
while (pos > 0) {
if (count <= 0) {
return;
}
getline(*fs, lastline);
std::cout << lastline << "\n";
fs->seekg(pos);
pos = MovetoLineStart(fs);
--count;
}
}
int main() {
std::fstream fs("/var/log/syslog", std::ios::in);
GetLinesReverse(&fs);
}