|
文本文件也叫做ASCII码文件,与以‘文本方式’打开文件不是同一个概念!文本文件存储的是ASSCII码字符,即存储在磁盘上只占用二进制的0x20--0x7e。另外,还有回车(0x0d),换行(0x0a),TAB(0x09)等,所以有可压缩的空间。 换行和回车是不同的,而且在不同的 回车(CR)和换行(LF)符都是用来表示“下一行”的。而标准没有规定要使用哪一个。于是产生了三种不同的用法: 文本方式和二进制方式的最大区别在于文本方式对于'\n'换行符的理解不同 在linux/unix 系统上,只有一种文件类型的系统,带b字母的模式和对应的不带b字母的模式是相同的。(UNIX文本文件通常不包含Ctrl+Z和\r) 关于EOF:
EOF可以作为文本文件的结束标志,但不能作为二进制文件的结束符.feof函数既可以判断二进制文件,又可以判断文本文件. EOF在Windows下是ctrl+z,linux下是ctrl+D.
2,_O_TEXT sets text (translated) mode. Carriage return–linefeed (CR-LF) combinations are translated into a single linefeed character on input. Linefeed characters are translated into CR-LF combinations on output. _O_BINARY sets binary (untranslated) mode, in which these translations are suppressed.
MS-DOS文本文件用回车符和换行符的组合\r\n表示行尾。Macintosh文本文件使用只用一个回车符\r来表示行尾。C程序使用\n表示行尾。所以,在C程序以文本方式打开一个MS-DOS文本文件时,会将\r\n转换为\n,在写入文件的时候它会将\n转换为\r\n。(如果以二进制方式打开该文件,则C程序将看到\r和\n两个字符。)而对于Macintosh文本文件的文本视图,在读取文件时它会将\r转换为\n,在写入文件的时候它会将\n转换为\r。 |