一、使用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);//按字符遍历文件内数据存入tempif(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;
}
运行:
思维导图: