最近在複習C語言 看到linux下head 和cat 的命令很好使 嘗試本身實現了一下
因此就弄了兩個程序 一個是讀取指定行數 一個是 讀取幾行;
系統環境 ubuntu 9.10
編程環境 GCC 4.41
截圖以下:
代碼以下
/*程序功能 實現指定文本的行數讀取
*使用方法 a.out <filename> <line no>
*/
![](http://static.javashuo.com/static/loading.gif)
#include <stdio.h>
![](http://static.javashuo.com/static/loading.gif)
#include <stdlib.h>
![](http://static.javashuo.com/static/loading.gif)
#include <
string.h>
char *read_line(
const
char *pathname,
int line_n)
![](http://static.javashuo.com/static/loading.gif)
{
int len,file_size;
char *str,*buf,*p;
![](http://static.javashuo.com/static/loading.gif)
FILE *fp;
![](http://static.javashuo.com/static/loading.gif)
fp=fopen(pathname,
"r" );
if(fp==NULL){
![](http://static.javashuo.com/static/loading.gif)
perror(
"fopen error");
![](http://static.javashuo.com/static/loading.gif)
exit(1);
![](http://static.javashuo.com/static/loading.gif)
}
![](http://static.javashuo.com/static/loading.gif)
fseek(fp,0,SEEK_END);
![](http://static.javashuo.com/static/loading.gif)
file_size=ftell(fp);
![](http://static.javashuo.com/static/loading.gif)
str=(
char *)calloc(file_size,
sizeof(
char));
![](http://static.javashuo.com/static/loading.gif)
rewind(fp);
![](http://static.javashuo.com/static/loading.gif)
fread(str,
sizeof(
char),file_size,fp);
![](http://static.javashuo.com/static/loading.gif)
str[file_size]='\0';
![](http://static.javashuo.com/static/loading.gif)
p=str;
char *q;
int n=line_n-1;
![](http://static.javashuo.com/static/loading.gif)
q=str;
while(*p++){
if(*p=='\n')
![](http://static.javashuo.com/static/loading.gif)
line_n--;
if(line_n==0)
break;
![](http://static.javashuo.com/static/loading.gif)
}
while(*q++)
![](http://static.javashuo.com/static/loading.gif)
{
if(*q=='\n')
![](http://static.javashuo.com/static/loading.gif)
n--;
if(n==0)
break;
![](http://static.javashuo.com/static/loading.gif)
}
![](http://static.javashuo.com/static/loading.gif)
q++;
if(*p=='\0')
![](http://static.javashuo.com/static/loading.gif)
{
![](http://static.javashuo.com/static/loading.gif)
printf(
"已經到行尾\n");
![](http://static.javashuo.com/static/loading.gif)
exit(1);
![](http://static.javashuo.com/static/loading.gif)
}
![](http://static.javashuo.com/static/loading.gif)
len=p-str;
![](http://static.javashuo.com/static/loading.gif)
str[len]='\0';
![](http://static.javashuo.com/static/loading.gif)
buf=q;
![](http://static.javashuo.com/static/loading.gif)
free(str);
![](http://static.javashuo.com/static/loading.gif)
fclose(fp);
return buf;
![](http://static.javashuo.com/static/loading.gif)
}
int main(
int argc,
char** argv)
![](http://static.javashuo.com/static/loading.gif)
{
int i=atoi(argv[2]);
char *buf;
![](http://static.javashuo.com/static/loading.gif)
buf= read_line(argv[1],i);
![](http://static.javashuo.com/static/loading.gif)
printf(
"%s\n",buf);
return 0;
![](http://static.javashuo.com/static/loading.gif)
}