标准IO练习
1> 使用fread和fwrite完成两个文件的拷贝,要求源文件和目标文件由外界输入
#include <myhead.h>
int main(int argc, const char *argv[])
{
//判断输入的文件是否个数为3
if(argc != 3)
{
fprintf(stderr,"input file error\n");
return -1;
}
//说明传输的文件数量正确
//打开所需要的文件
FILE* srcfp = fopen(argv[1],"r+");
if(NULL == srcfp)
{
perror("srcfp open error");
return -1;
}
FILE* desfp = fopen(argv[2],"w+");
if(NULL == desfp)
{
perror("desfp open error");
return -1;
}
//创建一个数组接受暂时保存传输的数据
char data[100]="";
while(1)
{
//从源文件中读取数据
int res = fread(data , 1,sizeof(data),srcfp);
if(res==strlen(data))
{
perror("读取结束");
}
int des = fwrite(data , 1,strlen(data),desfp);
if(des==strlen(data))
{
perror("写入结束");
fprintf(stdin ,"复制成功\n");
break;
}
}
fclose(srcfp);
fclose(desfp);
return 0;
}
2> 使用fgets获取当前文件的总行数
#include <myhead.h>
int main(int argc, const char *argv[])
{
//判断输入的文件是否个数为2
if(argc != 2)
{
fprintf(stderr,"input file error\n");
return -1;
}
FILE* fp = fopen(argv[1],"r");
if(NULL == fp)
{
perror("fopen error");
return -1;
}
char s[100] = "";
int i=0;
while(1)
{
char *p = fgets(s,sizeof(s),fp);
if(p != NULL){
i++; //读取成功计数加一行
}else if(p == NULL){
break; //读取失败,相当于读取结束
}
}
fclose(fp);
printf("该文件有%d行\n",i);
return 0;
}
3> 向文件中每一秒打印当前系统时间
#include <myhead.h>
#include <time.h>
int main(int argc, const char *argv[])
{
char buf[128] = ""; //存放转变后的字符串
int i=0;
char s[100] ="";
FILE * profp = fopen("time.txt","r+"); //追加的形式向文件添加时间戳
if(NULL == profp)
{
perror("fopen error");
return -1;
}
while(1)
{
char *p = fgets(s,sizeof(s),profp);
if(p != NULL){
i++; //读取成功计数加一行
}else if(p == NULL){
break; //读取失败,相当于读取结束
}
}
while(1){
//定义变量存放秒数
time_t sys_time = time(NULL);
//将秒数转换为结构体
struct tm* time_fist = localtime(&sys_time);
sprintf(buf,"%04d-%02d-%02d %02d:%02d:%02d\n",time_fist->tm_year+1900,\
time_fist->tm_mon+1,\
time_fist->tm_mday,\
time_fist->tm_hour,\
time_fist->tm_min,\
time_fist->tm_sec);
printf("buf = %s\n", buf);
printf("s = %s\n",s);
if(strcmp(s,buf)!=0)
{
i++;
printf("chenggong\n");
fprintf(profp,"%d、",i);
fwrite(buf,sizeof(buf),1,profp);
fprintf(profp,"\n");
fflush(profp);
}
strcpy(s,buf);
sleep(1);
}
fclose(profp);
return 0;
}