思维导图
1.用fget函数统计一个文件的行号
#include<stdio.h>
#include<string.h>
#include<errno.h>
int main(int argc, const char *argv[])
{
//判断是否有文件传入
if(argc!=2)
{
fputs("input file error\n",stdout);
fputs("usage:./a.out srcfile\n",stderr);
return -1;
}
//以只读形式打开文件
FILE *fp=NULL;
if((fp=fopen(argv[1],"r"))==NULL)
{
perror("fopen error");
return -1;
}
//读取文件内容
char buf[10]="";
//记录行号
int count=0;
//循环读取
while(1)
{
//读取一个字符
char *res=fgets(buf,sizeof(buf),fp);
//判断读取是否结束
if(res==NULL)
break;
//判断最后一个字符是否为\n
if(buf[strlen(buf)-1]=='\n')
count++;
}
printf("一共有%d行\n",count);
//关闭文件
fclose(fp);
return 0;
}
2.用fgets、fputs完成两个文件的拷贝
#include<stdio.h>
#include<string.h>
#include<errno.h>
int main(int argc, const char *argv[])
{
//定义文件指针
FILE *fp=NULL;
//以只读的形式打开文件
fp=fopen("./text.txt","r");
if(fp==NULL)
{
perror("fopen,error");
return -1;
}
//定义一个变量用于从文件中读取数据
char buf=0;
int count=0;
while(buf!=EOF)
{
buf=fgetc(fp);
if(buf=='\n')//每当读取到\n,count++
count++;
}
printf("count=%d\n",count);
//关闭文件
fclose(fp);
//copy
//以只读的形式打开文件
fp=fopen("./text.txt","r");
if(fp==NULL)
{
perror("fopen,error");
return -1;
}
FILE *fp1=NULL;
//以写的形式打开文件
fp1=fopen("./text2.txt","w");
if(fp1==NULL)
{
perror("fopen,error");
return -1;
}
char buf1=0;
while(1)
{
buf1=fgetc(fp);
if(buf1==EOF)
break;
fputc(buf1,fp1);
}
fclose(fp);
fclose(fp1);
return 0;
}
3.向文件中输入当前时间
#include<stdio.h>
#include<errno.h>
#include<time.h>
#include<unistd.h>
int main(int argc, const char *argv[])
{
FILE *fp=NULL;
if((fp=fopen("./time.txt","w"))==NULL)
{
perror("fppen,error");
return -1;
}
char time_str[1000000]="";
while(1)
{
//定义时间变量,存储秒数
time_t sys_time=0;
//调用时间函数,获取秒数
time(&sys_time); //sys_time=time(NULL);
//将秒数转变为时间结构体
struct tm* t=localtime(&sys_time);
char *res=fgets(time_str,sizeof(time_str),fp);
sprintf(time_str,"%4d-%2d-%2d %02d:%02d:%02d\n",t->tm_year+1900,t->tm_mon+1,\
t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
sleep(1);
fputs(time_str,fp);
fflush(fp);
printf("%s",time_str);
}
fclose(fp);
return 0;
}