有人告诉我,无论何时运行C ++程序,都会打开三个文件STDIN,STDOUT和STDERR,并在他的支持下给出了这个链接。
http://tldp.org/LDP/abs/html/io-redirection.html
但我很困惑天气这些流实际上是文件?
任何人都可以澄清吗?
答案 0 :(得分:3)
如果您在终端上键入man stdio
,则概要如下所示
#include <stdio.h>
FILE *stdin;
FILE *stdout;
FILE *stderr;
所以他们真的是文件。
如果您询问这些文件是否确实存在于某处,请查看/dev/stdin
,/dev/stdout
和/dev/stderr
。
答案 1 :(得分:2)
它们属于FILE*
类型。它们可以像具有IO功能的文件一样使用。但它们不是“真正的”文件 - 它们是标准的IO流。当你在shell中做这样的事情时(linux的例子):
cat something.txt | myprog
...然后myprog可以通过读取STDIN来读取something.txt(cat程序的输出)的内容。
答案 2 :(得分:2)
在POSIX系统上,流是特殊的文件描述符。 Windows有自己的错误..但它们也是文件描述符。 Windows上的特殊文件示例包括标准流stdout,stdin和stderr,以及COMn等串行端口,可以使用OpenFile()打开。在Linux上,在/ proc和/ dev下可以找到特殊文件。 / proc / cpuinfo将读回有关CPU的信息。 / dev / sdX是物理磁盘的句柄等。
那么什么是特殊文件?它是一个文件句柄,但内容不存储在磁盘上。文件句柄只是内核的接口。在POSIX系统上,您使用open(),close(),read(),write()和ioctl()通过文件描述符与内核通信。在/ dev / mem下,甚至可以获得整个内存映射的文件描述符。如果要映射内存区域,可以打开它并传递给mmap()。
不幸的是,Microsoft Windows不处理此级别的文件描述符。我希望Windows更像POSIX。