输出文本文件倒数n行数据

面试时曾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;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值