面试时曾2次被问到如何实现输出文本文件(可能非常非常大)后n行数据的问题,这个功能基本是Linux下tail命令的简化版,随意写了下。
因为涉及到不同系统及编码下回车换行的问题,情境比较复杂,在这里暂时未处理,但是基本处理思想是一样的。
代码目前在linux下运行正确,在windows下输出异常,就是因为字符编码(主要是回车换行)问题 >_> 仅供参考。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
//#define DEBUG
#define MAX_BUF_SIZE 4096
#define MIN(a, b) ((a) < (b) ? (a) : (b))
int main(int argc, char *argv[])
{
#ifndef DEBUG
if (argc != 3)
{
printf("usage: %s number_of_line(s) file\n", argv[0]);
exit(1);
}
int nline = atoi(argv[1]);
const char *filename = argv[2];
#else
int nline = 4;
const char *filename = "test.txt";
#endif
int nl = 0;
FILE *fp;
int buflen;
char buf[MAX_BUF_SIZE];
int fsz = 0, pos = 0;
int nblock = 0;
bool tobreak = false;