使用fread和fwrite完成两个文件的拷贝,要求源文件和目标文件由外界输入
#include <myhead.h>
int main(int argc, const char *argv[])
{
//判断是否有3个文件传入
if(3 != argc){
fputs("input file error\n",stderr);
return -1;
}
//打开源文件
FILE * sfp = fopen(argv[1] , "r");
//判断源文件是否打开成功
if(sfp == NULL){
perror("fopen argv[1] error");
return -1;
}
//打开目标文件
FILE * dfp = fopen(argv[2] , "w");
//判断目标文件是否打开成功
if(dfp == NULL){
perror("fopen argv[2] error ");
return -1;
}
//定义接收数据的字符数组
char dch[128] = "0";
while(1){
//从源文件中读取数据到数组中
//res读取到的数据长度
int res = fread(dch, 1, sizeof(dch), sfp);
//res为0,读取结束
if( res == 0 ){
break;
}
//将数组中的数据输出到目标文件中
fwrite(dch, 1 , res, dfp);
}
fclose(sfp); //关闭源文件
fclose(dfp); //关闭目标文件
return 0;
}
使用fgets获取当前文件的总行数
#include <myhead.h>
int main(int argc, const char *argv[])
{
//判断是否有2个文件传入
if(argc != 2){
fputs("input file error\n",stderr);
return -1;
}
//打开文件
FILE * fp = fopen(argv[1],"r");
//判断文件是否打开成功
if(fp ==NULL){
perror("fopen error");
return -1;
}
char ch[10] = ""; //定义接收字符的数组
int line = 0; //定义行数
while(1){
//从文件中读取数据到字符串中
//res为fgets返回值的结果
char * res = fgets(ch, sizeof(ch), fp);
//判断读取数据是否结束
if(res == NULL){
break;
}
//计算行号
if(ch[strlen(ch) - 1] == '\n'){
line++;
}
}
printf("%d\n",line);
fclose(fp); //关闭文件
return 0;
}
向文件中每一秒打印当前系统时间
#include <myhead.h>
int main(int argc, const char *argv[])
{
//判断是否有2个文件传入
if(argc != 2){
fputs("input file error\n",stderr);
return -1;
}
//打开文件
FILE * fp = fopen(argv[1],"w+");
//判断文件是否打开成功
if(fp ==NULL){
perror("fopen error");
return -1;
}
//临时变量t,存储上一个时间
char t[128] = "";
//行号
int line = 0;
while(1){
//定义变量存储秒数
time_t sys_time = time(NULL);
//将秒数转换成结构体
struct tm *time_ptr = localtime(&sys_time);
//存储每一次的时间
char ch[128] = "";
//将格式穿转换成字符串
sprintf(ch,"%5d\t%2d:%2d:%2d\n",++line, time_ptr->tm_hour, time_ptr->tm_min, time_ptr->tm_sec);
printf("ch=%s",ch);
//判断两次时间是否相等,不相等写入文件中
if(strcmp(t,ch) != 0){
printf("success!\n");
//将本次时间保存到临时变量
strcpy(t,ch);
fwrite(ch,sizeof(ch),1,fp);
//刷新行缓存
fflush(fp);
}
//休眠1s
sleep(1);
}
fclose(fp); //关闭文件
return 0;
}