Linux系统
在Linux系统中使用man fopen
命令查看fopen
函数的帮助信息可以看到下面这段话:
意思就是fopen
函数在指定文件打开模式的时候可以在后面加一个b
字符,这只是为了兼容C标准,在所有POSIX标准的系统上这个字符没有任何实际用处,包括Linux。其他系统上(例如 windows)fopen
函数对文本文件和二进制文件的处理方式不一样,所以要加一个b
字符来区分。如果你的程序需要移植到其他系统上,使用fopen
函数打开二进制文件时加一个b
字符是个好主意。
Windows系统
在msdn上查找fopen
函数的用法时看到如下信息:
意思是使用二进制模式打开文件,禁止回车符和换行符的翻译。
在Windows系统上当文本读取时,它每遇到一个\r\n
将其翻译为\n
,然后送到读缓冲区。
文本方式写时,每遇到一个\n
(0AH换行符),它将其换成\r\n
(0D0AH,回车换行),然后再写入文件。
所以Windows系统上文本方读写与二进制读写的差别仅仅体现在回车换行符的处理上。
测试
测试函数如下,向文件中写入字符串abcdefghijklmn\n
和数字0x12345678
int main()
{
FILE *fd = NULL;
char str[] = "abcdefghijklmn\n";
int num = 0x12345678;
fd = fopen("hello.txt", "wb+");
if (fd == NULL) {
printf("The file open filed\n");
return -1;
}
else
printf("The file open success\n");
fwrite(str, sizeof(str), 1, fd);
fwrite(&num, sizeof(int), 1, fd);
fclose(fd);
return 0;
}
-
fopen
函数二进制方式打开文件如下:
-
fopen
函数文本方式打开文件如下:
注:这是一个面试题,当时问的我不知所措。。。