文件复制
通过对文件进行复制,掌握流的基本操作。在程序中分别打开源文件和目标文件,然后循环从源文件中读取内容并且写入到目标文件里。(注意:不宜死循环太久)
案例是把1.txt内容循环复制到2.txt里
./mycopy 1.txt 2.txt
流程:
检查参数 -> 打开源文件 -> 打开目标文件 -> 循环读写文件 -> 关闭文件
代码
#include <stdio.h>
#include <errno.h>
#include <string.h>
#define N 64
int main(int argc, char *argv[])
{
int n;
char buf[N];
FILE *fps, *fpd;
if(argc < 3)
{
printf("Usage: %s <src_file> <dst_file>\n",argv[0]);
return -1;
}
if((fps = fopen(argv[1], "r")) == NULL)
{
fprintf(stderr, "Failed to open %s : %s\n", argv[1], strerror(errno));
return -1;
}
if((fpd = fopen(argv[2], "w")) == NULL)
{
fprintf(stderr, "Failed to fopen %s : %s\n", argv[2], strerror(errno));
fclose(fps);
return -1;
}
while((n = fread(buf, 1, N, fps)) >= 0)
{
fwrite(buf, 1, N, fpd);
}
fclose(fps);
fclose(fpd);
return 0;
}
循环记录时间
程序每隔一秒读取一次系统时间并显示出时间。
流程:
打开文件->获取系统时间->格式化显示时间->延时1s->返回获取系统时间的第二部(循环下去)
- 获取系统时间
- 在程序中实现延时
- 流的格式化输出
代码
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <unistd.h>
#define N 64
int main(int argc, char *argv[])
{
int n;
char buf[N];
FILE *fp;
time_t t;
struct tm* t_s=NULL;
if(argc < 2)
{
printf("Usage: %s <file>\n", argv[0]);
return -1;
}
if((fp = fopen(argv[1], "w")) == NULL)
{
perror("failed to fopen");
return -1;
}
while(1)
{
//t = time(&t);
//fprintf(fp, "%s\n", ctime(&t));
//fwrite(buf, 1, N, fp);
t = time(NULL);
t_s=localtime(&t);
fprintf(fp,"%d %d %d %d %d %d\n",t_s->tm_year+1900,t_s->tm_mon+1,t_s->tm_mday,t_s->tm_hour,t_s->tm_min,t_s->tm_sec);
fprintf(stdout,"%d %d %d %d %d %d\n",t_s->tm_year+1900,t_s->tm_mon+1,t_s->tm_mday,t_s->tm_hour,t_s->tm_min,t_s->tm_sec);
sleep(1);//延时1s
}
fclose(fp);
return 0;
}