Если вы хотите быть быстрым, и если ваша память достаточно велика, вы можете прочитать весь файл и проанализировать, чтобы получить количество строк новой строки, попробуйте это: скомпилируйте с gcc -g wc1.c -O3 -o wc1
:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef __OSX__
#define NLINE '\r'
#else
#define NLINE '\n'
#endif
void main(int argn, char **argv){
if(argn<2) return;
FILE *fp=fopen(argv[1],"rb");
int count=0;
size_t flen;
char *nb,*body;
fseek(fp,0,SEEK_END);
flen=ftell(fp);
body=(char*)calloc(1,flen+1);
fseek(fp,0,SEEK_SET);
if(fread(body,flen,1,fp)!=1){
fclose(fp);
exit(-1);
}
fclose(fp);
nb=body;
while(nb=strchr(nb,NLINE)){
count++;
nb++;
}
free(body);
printf("filename %s: line count %d\n",argv[1],count);
}
в качестве альтернативы, вы также можете установить максимальную ширину линии и вызывать fgets для чтения построчно, попробуйте это: gcc -g wc2.c -O3 -o wc2
#include <stdio.h>
#define MAX_LINE_LENGTH 4096
void main(int argn, char **argv){
if(argn<2) return;
FILE *fp=fopen(argv[1],"rt");
int count=0;
char line[MAX_LINE_LENGTH];
while(!feof(fp)){
if(fgets(line,MAX_LINE_LENGTH,fp))
count++;
}
fclose(fp);
printf("filename %s: line count %d\n",argv[1],count);
}