最近在复习C语言 突然想写些什么东西了,就实现了一下 head命令 在这个小程序的编写过程中 还是遇到了很多问题,使我了解了 指针的使用.
 
编程环境 Ubuntu 9.10  gcc 4.41
调用方式  a.out <filename> <lineno>
源码如下
InBlock.gif#include <stdio.h>
InBlock.gif#include <stdlib.h>
InBlock.gif#include < string.h>
InBlock.gif
InBlock.gif char    *read_line( const char *pathname, int line_n)
InBlock.gif{
InBlock.gif                     int len,file_size;
InBlock.gif                     char *str,*buf,*p;
InBlock.gif                     FILE *fp;
InBlock.gif                     fp=fopen(pathname, "r" );
InBlock.gif                     if(fp==NULL){
InBlock.gif            perror( "fopen error");
InBlock.gif        exit(1);
InBlock.gif      }
InBlock.gif        fseek(fp,0,SEEK_END);
InBlock.gif        file_size=ftell(fp);
InBlock.gif        str=( char *)calloc(file_size, sizeof( char));
InBlock.gif        rewind(fp);
InBlock.gif        fread(str, sizeof( char),file_size,fp);
InBlock.gif        str[file_size]='\0';
InBlock.gif             p=str;
InBlock.gif             while(*p++){        
InBlock.gif             if(*p=='\n')
InBlock.gif                 line_n--;
InBlock.gif             if(line_n==0)
InBlock.gif                 break;
InBlock.gif        }
InBlock.gif        len=p-str;
InBlock.gif             str[len]='\0';
InBlock.gif        buf=str;
InBlock.gif        free(str);
InBlock.gif        fclose(fp);
InBlock.gif         return buf;                        
InBlock.gif  }
InBlock.gif
InBlock.gif int main( int argc, char** argv)
InBlock.gif{
InBlock.gif   int i=atoi(argv[2]);
InBlock.gif   char *buf;
InBlock.gif     buf= read_line(argv[1],i);
InBlock.gif     printf( "%s\n",buf);
InBlock.gif   return 0;
InBlock.gif}