思維導圖
一、將當前的時間寫入到time.txt的文件中,如果ctrl+c退出之后,在再次執行支持斷點續寫
1.2022-04-26 19:10:20
2.2022-04-26 19:10:21
3.2022-04-26 19:10:22
//按下ctrl+c停止,再次執行程序
4.2022-04-26 20:00:00
5.2022-04-26 20:00:01
代碼?
#include <25041head.h>
int line();
int main(int argc, const char *argv[])
{int fd=open("./time.txt",O_RDWR | O_CREAT |O_APPEND,0777);time_t t;while(1){time(&t);//轉換為 xxxx年xx月xx日 xx時xx分xx秒struct tm *s=localtime(&t);if(NULL==s){ERRLOG("localtime error..");}char now_time[128]="";lseek(fd,0,SEEK_END);snprintf(now_time,sizeof(now_time),"%d.%04d-%02d-%02d %02d:%02d:%02d\n",\line()+1,s->tm_year+1900,s->tm_mon+1,s->tm_mday,\s->tm_hour,s->tm_min,s->tm_sec);write(fd,now_time,strlen(now_time));fprintf(stdout,"%s",now_time);sleep(1);}return 0;
}//計算當前行數
int line()
{FILE *fp=fopen("time.txt","r");if(NULL==fp){ERRLOG("fopen error..");}int count=0;while(1){char ch=fgetc(fp);if(EOF==ch){break;}if('\n'==ch)count++;}if(EOF==fclose(fp)){printf("fclose error..\n");return -1;}return count;
}
運行結果
二、使用文件IO函數實現圖片的拷貝?
代碼
#include <25041head.h>int main(int argc, const char *argv[])
{umask(0);int fd=open("./my.bmp",O_RDONLY);int fd_c=open("copy.bmp",O_RDWR | O_CREAT | O_TRUNC,0777);char buf[128]="";while(1){memset(buf,0,sizeof(buf));int res=read(fd,buf,sizeof(buf)-1);if(res==0)break; if(-1==res){ERRLOG("read error..");}write(fd_c,buf,sizeof(buf)-1);}if(-1==close(fd)&&-1==close(fd_c)){ERRLOG("close error..");}printf("圖片拷貝成功!\n");return 0;
}
運行結果
?三、使用文件IO讀取圖片 文件大小、文件偏移量,寬度,高度。
1.bmp文件頭(bmp file header):提供文件的格式、大小等信息 (14字節)
2.位圖信息頭(bitmap information):提供圖像數據的尺寸、位平面數、壓縮方式、顏色索引等信息(50字節)
3.位圖數據(bitmap data):就是圖像數據啦
代碼
#include <25041head.h>int main(int argc, const char *argv[])
{//打開bmp圖片文件int fd=open("./my.bmp",O_RDONLY);if(-1==fd){ERRLOG("open error..");}lseek(fd,2,SEEK_SET);//把光標定位到文件計算大小int size;if(-1== read(fd,&size,4)){ERRLOG("read error..");}printf("圖片文件大小為%d字節\n",size);//把光標定位到記錄文件偏移量的位置lseek(fd,10,SEEK_SET);int offset;if(-1==read(fd,&offset,4)){ERRLOG("read error..");}printf("圖片文件偏移量為%d字節\n",offset);//寬度lseek(fd,18,SEEK_SET);int width;if(-1==read(fd,&width,4)){ERRLOG("read error..");}printf("圖片寬度為%d像素\n",width);//高度,連續讀取,無需偏移 int height;if(-1==read(fd,&height,4)){ERRLOG("read error..");}printf("圖片高度為%d像素\n",height);//關閉文件if(-1==close(fd)){ERRLOG("close error..");}return 0;
}