有noC 编译器中的翻译。一串[并且这些都是等效的]:
// (1) these are all equivalent to a string of newline of length 1:
"\n"
"\x0a"
"\012"
// (2) these are all equivalent to a string of carriage return of length 1:
"\r"
"\x0d"
"\015"
// (3) these are all equivalent to a string of CRLF of length 2:
"\r\n"
"\x0d\0x0a"
"\015\012"
当输出到 POSIX 系统下的终端时,TTY 驱动程序会将 case (1) 以 Cooked 模式转换为 CRLF。这可以通过一些 TTY 来更改ioctl
来电。 IIRC,与 Windows 类似(?)。但是,[再次]IIRC,Windows 有一些必须完成的特定于 Windows 的调用,因为转换是在非常低的层完成的。
在 POSIX 系统下写入文件时,不会进行任何转换。
但是,在 Windows 下写入文件时,情况 (1) 会被操作系统转换为 CRLF 以便正常打开 [因为默认为“文本”模式]:
open(file,O_WRONLY);
fopen(file,"w");
To suppressWindows下的翻译对于情况(1),以“二进制”模式打开文件:
open(file,O_WRONLY | O_BINARY);
fopen(file,"wb");
二进制模式也适用于以读取模式打开。而且,对于 POSIX,它[实际上]是一个无操作并且被忽略。有/没有二进制选项,在 POSIX 下,都是以二进制模式打开,因为 POSIX 有no文件的“文本模式”。
因此,为了 POSIX/Windows 之间的可移植性,这是用来抑制转换的模式。