stdout 必须是文本流吗?
Is stdout required to be a text stream?
我运行 cygwin/gcc 4.7.3 和 VS 2010 下的以下程序。
#include <stdio.h>
int main()
{
printf("This is a test.\n");
return 0;
}
在这些环境下 运行 程序的输出显示 VS 2010 将 stdout
视为文本流。
问题:
stdout
必须是文本流吗?
- 实现是否可以自由选择是使用文本流还是二进制流
stdout
?
编辑
如何以二进制方式写入stdout
的问题与要求stdout
是文本流还是二进制流是不同的
stdout
必须是文本流,stdin
和 stderr
也是如此。来自C99标准,7.19.3(7):
At program startup, three text streams are predefined and need not be opened explicitly -- standard input (for reading conventional input), standard output (for writing conventional output), and standard error (for writing diagnostic output). (...)
(强调我的)1
供参考:在C标准的2011修订版中,这已被原样移动到7.21.3(7)。2
请注意,这意味着这三个流在启动时是文本流。一些平台提供了稍后切换模式的方式,例如Windows下的_setmode
。
1 只是为了完整起见:stdin
、stdout
和 stderr
引用这些流在 7.19 中定义.1 (3).
2脚注1中提到的部分移至C11中的7.21.1(3)。
您可以使用 fwrite()
或 write()
将原始字节流式传输到 stdout
,并使用 stdout
的等效文件描述符。例如,这就是压缩工具的工作方式。
stdout
不需要是文本流 - 在重定向的情况下。
所以我猜你的第二个问题的答案是 'yes'。
看看这个 -
What is the simplest way to write to stdout in binary mode?
我运行 cygwin/gcc 4.7.3 和 VS 2010 下的以下程序。
#include <stdio.h>
int main()
{
printf("This is a test.\n");
return 0;
}
在这些环境下 运行 程序的输出显示 VS 2010 将 stdout
视为文本流。
问题:
stdout
必须是文本流吗?- 实现是否可以自由选择是使用文本流还是二进制流
stdout
?
编辑
如何以二进制方式写入stdout
的问题与要求stdout
是文本流还是二进制流是不同的
stdout
必须是文本流,stdin
和 stderr
也是如此。来自C99标准,7.19.3(7):
At program startup, three text streams are predefined and need not be opened explicitly -- standard input (for reading conventional input), standard output (for writing conventional output), and standard error (for writing diagnostic output). (...)
(强调我的)1
供参考:在C标准的2011修订版中,这已被原样移动到7.21.3(7)。2
请注意,这意味着这三个流在启动时是文本流。一些平台提供了稍后切换模式的方式,例如Windows下的_setmode
。
1 只是为了完整起见:stdin
、stdout
和 stderr
引用这些流在 7.19 中定义.1 (3).
2脚注1中提到的部分移至C11中的7.21.1(3)。
您可以使用 fwrite()
或 write()
将原始字节流式传输到 stdout
,并使用 stdout
的等效文件描述符。例如,这就是压缩工具的工作方式。
stdout
不需要是文本流 - 在重定向的情况下。
所以我猜你的第二个问题的答案是 'yes'。
看看这个 - What is the simplest way to write to stdout in binary mode?