黑色部分为程序,白色部分为注解,部分内容转载子网络.
1.头文件
#include <cstdio>
#include <unistd.h>
2.打开文件
typedef struct {
unsigned char head[2];
unsigned char status;
unsigned char crc8;
unsigned short datalen;
}BACKUP_HEAD;
BACKUP_HEAD bhead = {
'A',
'B',
0x0A,
0x0A,
0x0A};
FILE *fp = (FILE *)0x00;
if(!(fp = fopen("/dev/mtdblock4", "w+"))) return -0x01;
w是以文本方式打开文件,wb是二进制方式打开文件,以文本方式打开文件时,fwrite函数每碰到一个0x0A时,
就在它的前面加入0x0D.其它内容不做添加操作。
如:
fwrite((char *)&bhead,sizeof(BACKUP_HEAD),1,fp);
我们的结构体定义了三个0x0A,所以当以文本文件来操作时,遇到0x0A内容不会写进去,而是相当于回车换行.
结果:
将w换成wb+
FILE *fp = (FILE *)0x00;
if(!(fp = fopen("/dev/mtdblock4", "wb+"))) return -0x01;
重写
fwrite((char *)&bhead,sizeof(BACKUP_HEAD),1,fp);结果为
而二进制方式则会将数据按照在内存中的存储形式原样输出到文件中。
总结:
(1)写入和读取要保持一致。如果写入时采用文本方式,则读取时也应采用文本方式;如果写入时采用二进制方式,则读取时也应采用二进制方式。
(2)不管是文本文件,还是二进制文件,如果统一采用二进制方式进行读写,则不会出错。