实现:
定义一个buf,先把用ctime函数得到的日历时间放到buf中,再fwrite到文件1。然后关闭文件,再以只读打开,把文件1内容fread到buf2内。最后把buf2中日历时间显示到终端。
源代码:
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 int main(int argc, char *argv[]){10 time_t t;//必须定义一个时间变量,然后取到个地址。不能time_t * p_t;11 char *t_ctime;12 char buf[25] = "\0";13 char buf2[25] = "\0";14 int ret_fwrite;15 int ret_fread;16 FILE *fp_write;17 FILE *fp_read;18 int i;19 20 if(2 != argc){21 printf("%s ",argv[1]);22 exit(1);23 }24 for(i = 0;i < 3;i++){25 //打开文件26 fp_write = fopen(argv[1],"a");//追加写27 if(fp_write == NULL){28 perror("fopen file1 no ok!\n");29 exit(1);30 }31 32 //得到时间33 time(&t);//秒时间34 t_ctime = ctime(&t);//日历时间35 strcpy(buf,ctime(&t));//日历时间复制到buf36 printf("buf's time data:\n");37 fwrite(buf,sizeof(char),25,stdout);//法1,buf写到终端38 // fputs(buf,stdout);//法2,buf写到终端39 // printf("%s",buf);//法3,buf写到终端40 41 //写文件142 ret_fwrite = fwrite(buf,sizeof(char),25,fp_write);//把buf内容写到文件143 if(ret_fwrite == 0){44 perror("fwrite file1 no ok!");45 exit(1);46 }47 fclose(fp_write);//关闭文件148 49 //读文件150 fp_read = fopen(argv[1],"r");//只读打开51 ret_fread = fread(buf2,sizeof(char),25,fp_read);52 printf("buf2's time data:\n");53 fputs(buf2,stdout);//读buf2到终端54 printf("\n");55 sleep(1);56 }57 return 0;58 }
shell显示:
补充:
1、关于定义buf时,注意要保证buf为空。实现方法有
法一,通过初始化清空:char buf[25] = {'\0'} 或"\0"法二,通过bzero(buf,size)清空,此时要包含<strings.h>法三,通过每次strlen(buf)写入文件1的长度来传数据。法四,令size = 1(效率低)2、在while(1)循环显示下,若不加sleep(1)延时1s的话,会导致:fopen file1 no ok! :Too many open files
可能因为文件打开输入太快,导致出错。3、源代码中定义buf长度为25,是因为日历时间一条长度为25。当然可以定义数组大于25,但我想提醒自己注意这个长度。