实现指定文本文件行数的读取
原创
©著作权归作者所有:来自51CTO博客作者foxhack的原创作品,请联系作者获取转载授权,否则将追究法律责任
最近在复习C语言 看到linux下head 和cat 的命令很好使 尝试自己实现了一下
所以就弄了两个程序 一个是读取指定行数 一个是 读取几行;
系统环境 ubuntu 9.10
编程环境 GCC 4.41
截图如下:
代码如下
/*程序功能 实现指定文本的行数读取
*使用方法 a.out <filename> <line no>
*/

#include <stdio.h>

#include <stdlib.h>

#include <
string.h>
char *read_line(
const char *pathname,
int line_n)

{
int len,file_size;
char *str,*buf,*p;

FILE *fp;

fp=fopen(pathname,
"r" );
if(fp==NULL){

perror(
"fopen error");

exit(1);

}

fseek(fp,0,SEEK_END);

file_size=ftell(fp);

str=(
char *)calloc(file_size,
sizeof(
char));

rewind(fp);

fread(str,
sizeof(
char),file_size,fp);

str[file_size]='\0';

p=str;
char *q;
int n=line_n-1;

q=str;
while(*p++){
if(*p=='\n')

line_n--;
if(line_n==0)
break;

}
while(*q++)

{
if(*q=='\n')

n--;
if(n==0)
break;

}

q++;
if(*p=='\0')

{

printf(
"已经到行尾\n");

exit(1);

}

len=p-str;

str[len]='\0';

buf=q;

free(str);

fclose(fp);
return buf;

}
int main(
int argc,
char** argv)

{
int i=atoi(argv[2]);
char *buf;

buf= read_line(argv[1],i);

printf(
"%s\n",buf);
return 0;

}