最近在复习C语言 突然想写些什么东西了,就实现了一下 head命令 在这个小程序的编写过程中 还是遇到了很多问题,使我了解了 指针的使用.
编程环境 Ubuntu 9.10 gcc 4.41
调用方式 a.out <filename> <lineno>
源码如下
#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;
while(*p++){
if(*p=='\n')
line_n--;
if(line_n==0)
break;
}
len=p-str;
str[len]='\0';
buf=str;
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;
}
#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;
while(*p++){
if(*p=='\n')
line_n--;
if(line_n==0)
break;
}
len=p-str;
str[len]='\0';
buf=str;
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;
}
转载于:https://blog.51cto.com/foxhack/292093