统计自己从C学习开始到现在,一共敲了多少行代码。
要求:
1.使用C语言实现
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
int read_dir(char *pathname, char *filename);
int file_type(char *filename);
int get_file_line(char *filename);
int get_dir_file_line(char *filename, int lines);
int main()
{
system("rm myfile");
read_dir("/home/gxf/21021class","myfile");
int ret = get_file_line("myfile");
ret = get_dir_file_line("myfile",ret);
printf("line:%d\n",ret);
return 0;
}
int get_dir_file_line(char *filename, int lines)
{
int count = 0;
if(lines <= 0)
{
return -1;
}
if(NULL == filename)
{
return -1;
}
FILE *fp = fopen(filename,"r");
if(NULL == fp)
{
return -1;
}
int i = 0;
for(i = 0; i < lines; i++)
{
char buf[250] = {0};
fgets(buf,250,fp);
int len = strlen(buf);
buf[len-1] = 0;
puts(buf);
int ret = get_file_line(buf);
printf("ret:%d\n",ret);
if(ret > 0)
{
count += ret;
}
}
fclose(fp);
return count;
}
int read_dir(char *pathname, char *filename)
{
if(NULL == pathname || NULL == filename)
{
puts("pathname or filename is null pointer");
return -1;
}
DIR* fdp = opendir(pathname);
if(NULL == fdp)
{
puts("opendir error.");
return -1;
}
puts("opendir success.");
FILE *fp = fopen(filename,"a");
if(NULL == fp)
{
puts("create file error.");
closedir(fdp);
return -1;
}
while(1)
{
char buf[250];
int ret = 0;
struct dirent *pd = readdir(fdp);
if(pd != NULL)
{
if(strcmp(pd->d_name,".") == 0 || strcmp(pd->d_name,"..") == 0)
{
continue;
}
switch(pd->d_type)
{
case DT_REG:
//*.[ch] do it
ret = file_type(pd->d_name);
//printf("%s\tret:%d\n",pd->d_name, ret);
if(ret == 1)
{
memset(buf, 0, sizeof(buf));
sprintf(buf,"%s/%s\n",pathname,pd->d_name);
//puts(buf);
fwrite(buf,strlen(buf),1,fp);
}
break;
case DT_DIR:
memset(buf, 0, sizeof(buf));
sprintf(buf,"%s/%s",pathname,pd->d_name);
//puts(buf);
read_dir(buf,filename);
sleep(2);
break;
}
}
else
{
break;
}
}
closedir(fdp);
fclose(fp);
return 0;
}
int file_type(char *filename)
{
if(NULL == filename)
{
return 0;
}
int len = strlen(filename);
if(filename[len-1] == 'c' || filename[len-1] == 'h')
{
return 1;
}
}
int get_file_line(char *filename)
{
int count = 0;
if(NULL == filename)
{
return -1;
}
FILE *fp = fopen(filename,"r");
if(NULL == fp)
{
puts("open file error.");
return -1;
}
char buf[2];
while(1)
{
memset(buf,0,sizeof(buf));
int ret = fread(buf,1,1,fp);
if(ret > 0)
{
if(buf[0] == '\n')
{
count++;
}
}
else
{
break;
}
}
return count;
}