最近在复习C语言 看到linux下head 和cat 的命令很好使 尝试自己实现了一下
所以就弄了两个程序 一个是读取指定行数 一个是 读取几行;
系统环境 ubuntu 9.10
编程环境 GCC 4.41
截图如下:
实现指定文本文件行数的读取_C
 
代码如下
实现指定文本文件行数的读取_休闲_02/*程序功能 实现指定文本的行数读取
实现指定文本文件行数的读取_休闲_02 *使用方法 a.out <filename> <line no>
实现指定文本文件行数的读取_休闲_02 */

实现指定文本文件行数的读取_休闲_02
实现指定文本文件行数的读取_休闲_02#include <stdio.h>
实现指定文本文件行数的读取_休闲_02#include <stdlib.h>
实现指定文本文件行数的读取_休闲_02#include <string.h>
实现指定文本文件行数的读取_休闲_02
实现指定文本文件行数的读取_休闲_02char    *read_line(const char *pathname,int line_n)
实现指定文本文件行数的读取_休闲_02{
实现指定文本文件行数的读取_休闲_02                     int len,file_size;
实现指定文本文件行数的读取_休闲_02                     char *str,*buf,*p;
实现指定文本文件行数的读取_休闲_02                     FILE *fp;
实现指定文本文件行数的读取_休闲_02                     fp=fopen(pathname,"r" );
实现指定文本文件行数的读取_休闲_02                     if(fp==NULL){
实现指定文本文件行数的读取_休闲_02            perror("fopen error");
实现指定文本文件行数的读取_休闲_02        exit(1);
实现指定文本文件行数的读取_休闲_02      }
实现指定文本文件行数的读取_休闲_02        fseek(fp,0,SEEK_END);
实现指定文本文件行数的读取_休闲_02        file_size=ftell(fp);
实现指定文本文件行数的读取_休闲_02        str=(char *)calloc(file_size,sizeof(char));
实现指定文本文件行数的读取_休闲_02        rewind(fp);
实现指定文本文件行数的读取_休闲_02        fread(str,sizeof(char),file_size,fp);
实现指定文本文件行数的读取_休闲_02        str[file_size]='\0';
实现指定文本文件行数的读取_休闲_02             p=str;
实现指定文本文件行数的读取_休闲_02             char *q;
实现指定文本文件行数的读取_休闲_02             int n=line_n-1;
实现指定文本文件行数的读取_休闲_02             q=str;
实现指定文本文件行数的读取_休闲_02             while(*p++){        
实现指定文本文件行数的读取_休闲_02            if(*p=='\n')
实现指定文本文件行数的读取_休闲_02                 line_n--;
实现指定文本文件行数的读取_休闲_02            if(line_n==0)
实现指定文本文件行数的读取_休闲_02                 break;
实现指定文本文件行数的读取_休闲_02        }
实现指定文本文件行数的读取_休闲_02        while(*q++)
实现指定文本文件行数的读取_休闲_02        {
实现指定文本文件行数的读取_休闲_02         if(*q=='\n')
实现指定文本文件行数的读取_休闲_02                 n--;
实现指定文本文件行数的读取_休闲_02         if(n==0)
实现指定文本文件行数的读取_休闲_02            break;
实现指定文本文件行数的读取_休闲_02         }
实现指定文本文件行数的读取_休闲_02         q++;
实现指定文本文件行数的读取_休闲_02         if(*p=='\0')
实现指定文本文件行数的读取_休闲_02             {
实现指定文本文件行数的读取_休闲_02          printf("已经到行尾\n");
实现指定文本文件行数的读取_休闲_02          exit(1);
实现指定文本文件行数的读取_休闲_02             }
实现指定文本文件行数的读取_休闲_02        len=p-str;
实现指定文本文件行数的读取_休闲_02             str[len]='\0';
实现指定文本文件行数的读取_休闲_02        buf=q;
实现指定文本文件行数的读取_休闲_02        free(str);
实现指定文本文件行数的读取_休闲_02        fclose(fp);
实现指定文本文件行数的读取_休闲_02        return buf;                        
实现指定文本文件行数的读取_休闲_02  }
实现指定文本文件行数的读取_休闲_02
实现指定文本文件行数的读取_休闲_02int main(int argc, char** argv)
实现指定文本文件行数的读取_休闲_02{
实现指定文本文件行数的读取_休闲_02  int i=atoi(argv[2]);
实现指定文本文件行数的读取_休闲_02  char *buf;
实现指定文本文件行数的读取_休闲_02     buf= read_line(argv[1],i);
实现指定文本文件行数的读取_休闲_02     printf("%s\n",buf);
实现指定文本文件行数的读取_休闲_02  return 0;
实现指定文本文件行数的读取_休闲_02}