输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据

来源:互联网 发布:利用js让网站自动登录 编辑:程序博客网 时间:2024/06/16 00:47

C程序,功能如题,代码如下:

/*功能:输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据基本思路:产生一个长度为n的二维数组,将它作为一个循环队列来看待*/#include <stdio.h>#include <stdlib.h>#include <string.h>#define BUFLEN 256// 显示一个文件的最后len行数据void run(char *filename, int len){int i;char **buf = NULL;char temp[BUFLEN] = {0};FILE *fp;buf = malloc(len * sizeof(char*));for(i = 0; i < len; i++){buf[i] = (char*)malloc(BUFLEN * sizeof(char));memset(buf[i], 0, BUFLEN * sizeof(char));// 清零}if((fp = fopen(filename, "r")) == NULL){printf("open file [%s] failed\n", filename);}else{i = 0;int lineCount = 0;// 文件的实际行数while(fgets(temp, BUFLEN, fp) != NULL){strcpy(buf[i], temp);i = (i + 1) % len; lineCount++;// 数据行数加1}printf("lineCount = %d\n", lineCount);if(lineCount <= len)// 文件实际行数小于等于需要提取的行数{for(i = 0; i < lineCount; i++)printf("L%d: %s", i+1, buf[i]);}else{int start = i;do {printf("L%d: %s", i, buf[i]);i = (i + 1 + len) % len;} while (i != start);}}fclose(fp);for(i = 0; i < len; i++)free(buf[i]);free(buf);}int main(int argc, char *argv[]){if(argc < 3){printf("Usage: %s <filename> <n>\n", argv[0]);}else{int n = atoi(argv[2]);run(argv[1], n);printf("\n");}return 0;}


运行结果:

[zcm@t #93]$./a test2.txt 2lineCount = 4L0:      3chinese Chinese environmentL1:      4english English environment[zcm@t #94]$./a test2.txt 5lineCount = 4L1:      1come one, obayL2:      2<Quidway> language-mode ?L3:      3chinese Chinese environmentL4:      4english English environment[zcm@t #95]$./a test2.txt 4lineCount = 4L1:      1come one, obayL2:      2<Quidway> language-mode ?L3:      3chinese Chinese environmentL4:      4english English environment[zcm@t #96]$./a test2.txt 3lineCount = 4L1:      2<Quidway> language-mode ?L2:      3chinese Chinese environmentL0:      4english English environment[zcm@t #97]$


 

原创粉丝点击