1.完成下面要求完成
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
int count(FILE* fp){
char c=0;
int count=0;
while((c=fgetc(fp))!=EOF){
if(c=='\n'){
count++;
}
}
return count;
}
int main(int argc, const char *argv[])
{
FILE* fp=fopen("./time.txt","a+");
time_t t;
//time(&t);
//转换成日历格式
struct tm *info = NULL;
int count1=count(fp);
while(1)
{
t = time(NULL);
info = localtime(&t);
fprintf(fp,"[%d] %d-%02d-%02d %02d:%02d:%02d\n", \
count1,info->tm_year+1900, info->tm_mon+1, info->tm_mday,\
info->tm_hour, info->tm_min, info->tm_sec);
count1++;
//由于printf是行缓冲,上述没有满足任何一种刷新缓冲区的机制
//所以要用fflush强制刷新
fflush(fp);
sleep(1);
}
return 0;
}
实验结果如下图:
2.完成如下所需要求:
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, const char *argv[])
{
//以读的方式打开源图片
int fd_r = open("./4.png", O_RDONLY);
if(fd_r < 0)
{
perror("open");
return -1;
}
//以写的方式打开目标图片
int fd_w = open("./cpy.png", O_WRONLY|O_CREAT|O_TRUNC, 0664);
if(fd_w < 0)
{
perror("open");
return -1;
}
//读一次写一次,直到文件读取完毕
char buf[128] = "";
ssize_t res = 0;
while(1)
{
bzero(buf, sizeof(buf));
res = read(fd_r, buf, sizeof(buf));
if(0 == res)
{
break;
}
write(fd_w, buf, res);
}
//关闭文件
close(fd_r);
close(fd_w);
return 0;
}