是stdin,stdout和stderr文件吗?
有人告诉我,每当一个C++程序运行三个文件STDIN,STDOUT和STDERR被打开,他给他的支持此链接..是stdin,stdout和stderr文件吗?
http://tldp.org/LDP/abs/html/io-redirection.html
但我很困惑的天气,这些流实际上是文件?
任何人都可以澄清?
在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。
Windows _Handles_的工作与此非常相似。您可以使用WriteFile(HANDLE输出)写入句柄。即使它是从'GetStdHandle(STD_OUTPUT_HANDLE);'获得的句柄, – MSalters 2010-08-18 14:53:03
如果你的终端上键入man stdio
的简介是这样的
#include <stdio.h>
FILE *stdin;
FILE *stdout;
FILE *stderr;
所以他们真的是文件。
如果您问这些文件是否确实存在,请查看/dev/stdin
,/dev/stdout
和/dev/stderr
。
它们是FILE*
类型。它们可以像使用IO功能的文件一样使用。但它们不是'真正'的文件 - 它们是标准的IO流。当你做这样的事情在你的shell(例如对于Linux):
cat something.txt | myprog
...然后MYPROG可以从标准输入读读something.txt的内容(猫程序的输出)。
您是否看到过您提供的链接中的注释[1]?这实际上回答你的问题。 – MSalters 2010-08-18 14:56:22