如何C输出LF标准输出而不改变为CR LF?

在Windows上这个

#include <stdio.h> int main() { putc('A',stdout); putc('\r',stdout); putc('\n',stdout); } 

输出

 A<CR><CR><LF> 

如何写入LF字符到标准输出而不自动转换为CR LF?

我需要它使简单的套接字stream读取器标准输出。 我试过CodeGear的bcc32,mingw,tinycc都产生相同的结果,把putc改成putchar,fputc,fwrite也没有帮助。

Solutions Collecting From Web of "如何C输出LF标准输出而不改变为CR LF?"

MSVC解决方案是:

 #include <io.h> #include <fcntl.h> ... _setmode(1,_O_BINARY) 

其他运行时可能会提供C99解决方案或替代方法。 编辑:我相信setmode([file number],O_BINARY)起源于Borland的Turbo C,和其他编译器为MS-DOS和Windows模仿它。 _前缀是为了保持名称空间的干净,并且在某些编译器上可能不存在。

文本文件将C字符'\n'转换为输出结尾的本地行,并将输入结尾的本地行转换为单个'\n'

为了得到你需要的结果,你必须把stdout改成二进制文件流。

部分答案在这里找到。 如果您有符合C99的库,请使用:

 if (freopen(0, "wb", stdout) == 0) ...oops...operation failed... 

将尝试将标准输出更改为二进制流。 但是,在Windows上,“符合C99的库”可能是一个问题。 名义上,这是便携式(因为标准)的答案。 有可能是一个Windows特定的功能来做同样的工作。

只需输出LF字符,如下所示: putc('\x0A', stdout)