一、使用fread和fwrite完成两个图片文件的拷贝(标准IO)。
代码:
#include<myhead.h>
int main(int argc, const char *argv[])
{
FILE *srcfp=NULL;
FILE *destfp=NULL;
if((srcfp=fopen("./hongfeng.bmp","r"))==NULL || (destfp=fopen("./yezi.bmp","r+"))==NULL)
{
perror("fopen error");//打开两个图片文件
return -1;
}
int bmpSizeh=0;
int bmpSizey=0;
fseek(srcfp,2,SEEK_SET);//光标移动到存放图片数据大小的位置
fseek(destfp,2,SEEK_SET);
fread(&bmpSizeh,sizeof(int),1,srcfp);//读取图片大小
fread(&bmpSizey,4,1,destfp);
printf("bmpSizeh=%d bmpSizey=%d\n",bmpSizeh,bmpSizey);//输出大小
fseek(srcfp,54,SEEK_SET);//光标移动到图像像素矩阵位置
fseek(destfp,54,SEEK_SET);
unsigned char color[3]={0,0,0};//定义一个数组存放每个像素点的颜色数值
for(int i=0;i<500;i++)
{
for(int j=0;j<800;j++)
{
fread(color,sizeof(color),1,srcfp);//从hongfeng.bmp中保存一个像素点数据
fwrite(color,sizeof(color),1,destfp);//拷贝到yezi.bmp对应的位置
}
}
fclose(srcfp);//关闭文件
fclose(destfp);
return 0;
}
运行:
二、 使用read、write完成两个文件的拷贝(文件IO)。
代码:
#include<myhead.h>
int main(int argc, const char *argv[])
{
int srcfd= -1,destfd= -1;
if((srcfd=open("./1.c",O_RDONLY))==-1 || (destfd=open("./2.txt",O_WRONLY|O_CREAT|O_APPEND,0664))==-1)
{
perror("open error");//只读形式打开1.c 只写|创建|追加形式打开2.txt;
return -1;
}
printf("open success srcfd=%d destfd=%d\n",srcfd,destfd);//打开成功输出文件描述符
char ch[128]="";
while(1)
{
ssize_t res=read(srcfd,ch,sizeof(ch));//从1.c中复制数据
if(res==0) //读取失败返回-1,结束循环;
break;
write(destfd,ch,res);//向2.txt写入数据
}
close(srcfd);//关闭文件
close(destfd);
return 0;
}
运行:
三、将时间在文件中输出 按秒刷新:
如1、17:30:41
2、17:30:42
3、17:30:43
键入ctrl+c,结束进程后
...
4、17:35:28
5、17:35:29
代码:
#include<myhead.h>
int main(int argc, const char *argv[])
{
while(1)//外部循环控制
{
int fd=-1;
if((fd=open("./time.txt",O_RDWR|O_CREAT|O_APPEND,0664))==-1)
{
perror("open error");//创建time.txt文件并追加打开
return -1;
}
int line=1;//行号1开始
while(1)
{
char temp;
ssize_t rew=read(fd,&temp,1);//按字符遍历文件内数据存入temp
if(rew<=0)//遍历结束条件;
break;
if(temp=='\n')
line++;//记录行号
}
time_t sysTime=0;
time(&sysTime);//获取秒数
struct tm *t=localtime(&sysTime);//获取结构体
char ch[32]="";//存入时间的字符串
snprintf(ch,sizeof(ch),"%2d、%2d:%2d:%2d\n",line,t->tm_hour,t->tm_min,t->tm_sec);
write(fd,ch,strlen(ch));//将字符串中的行、小时:分钟:秒存入文件
write(2,ch,strlen(ch));//在终端输出
sleep(1);//休眠一秒
close(fd);
}
return 0;
}
运行:
思维导图: