真正的换行(LF)的转义序列

真正的换行(LF)的转义序列

C编译器中没有翻译功能。以下字符串都是等效的:

// (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驱动程序会将形式(1)转换为CRLF(在熟模式下)。这可以通过一些TTY ioctl调用来改变。如果我没记错的话,windows也是类似的。但是,我记得windows有一些特定于windows的调用必须要做,因为翻译是在非常低的层次上完成的。

在POSIX系统下写入文件时,不进行任何转换。

然而,在Windows下向文件写入时,由于默认模式为“文本”,操作系统将形式(1)转换为CRLF:

open(file,O_WRONLY);

fopen(file,"w");

为了在Windows下禁止针对情况(1)的翻译,请以“二进制”模式打开文件:

open(file,O_WRONLY | O_BINARY);

fopen(file,"wb");

二进制模式也适用于读取模式。在 POSIX 中,它 [有效地] 是一个无操作并被忽略的选项。在 POSIX 下,不管有没有二进制选项,都是以二进制模式打开文件,因为 POSIX 没有“文本模式”。

因此,为了在 POSIX/Windows 之间实现可移植性,这是抑制转换的模式。

相关推荐

2+1拼购系统爆火:7 人成团就能无限裂变?全新机制玩法拆解分析!
淘宝查排名在哪里查?怎么查自己店铺排名?
如何提高产品竞争力
red怎么翻译及发音