思维导图:
使用fgets统计一个文件的行号
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, const char *argv[])
{
FILE *fp=NULL;
if((fp=fopen("test.txt","r"))==NULL)
{
perror("fopen error");
return -1;
}
char buf[128]="0";
int count=0;
while(1)
{
char *res= fgets(buf,sizeof(buf),fp);
if(res==NULL)
{
break;
}
count++;
}
printf("文件有%d行\n",count);
fclose(fp);
return 0;
}
运行效果:
?使用fgets、fputs完成两个文件的拷贝
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, const char *argv[])
{
FILE *fp=NULL;//读取文件
if((fp=fopen("test.txt","r"))==NULL)
{
perror("fopen error");
return -1;
}
FILE *fq=NULL;//写入文件
if((fq=fopen("test1.txt","w"))==NULL)
{
perror("fopen error");
return -1;
}
char buf[128];
while(1)
{
char *res=fgets(buf,sizeof(buf),fp);
if(res==NULL)
{
break;
}
fputs(res,fq);
}
fclose(fp);
fclose(fq);
return 0;
}
运行效果:
?向文件中拷贝
?代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
FILE *fp=NULL;
if((fp=fopen("test123.txt","a+"))==NULL)
{
perror("fopen error");
return -1;
}
//存储格式字符串的容器
char buf[128]=" ";
int i=0;//计数
while(1)
{
char *res=fgets(buf,sizeof(buf),fp);
if(res==NULL)
{
break;
}
i++;
}
int line=i+1;//开始行数
//定义一个时间类型的变量,存储秒数
time_t sys_time=0;
while(1)
{
//调用时间函数,获取秒数
sys_time=time(NULL);
//将秒数转变成时间结构体类型
struct tm *t=localtime(&sys_time);
//转换成字符串
sprintf(buf,"%d:%4d-%02d-%02d %02d:%02d:%02d\n",line++,\
t->tm_year+1900,t->tm_mon+1,t->tm_mday,\
t->tm_hour,t->tm_min,t->tm_sec);
sleep(1);
printf("buf=%s\n",buf);
fputs(buf,fp);//输入
fflush(fp);//刷新缓冲区
}
fclose(fp);
return 0;
}
运行效果: