2010-08-18 71 views

回答

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。

+0

Windows _Handles_的工作与此非常相似。您可以使用WriteFile(HANDLE输出)写入句柄。即使它是从'GetStdHandle(STD_OUTPUT_HANDLE);'获得的句柄, – MSalters 2010-08-18 14:53:03

2

如果你的终端上键入man stdio的简介是这样的

#include <stdio.h> 

FILE *stdin; 
FILE *stdout; 
FILE *stderr; 

所以他们真的是文件。

如果您问这些文件是否确实存在,请查看/dev/stdin,/dev/stdout/dev/stderr

+0

位于Windows系统上的这些文件夹在哪里? – Shubham 2010-08-18 11:53:09

+0

@ShubhamTouché:-)我没有用过10年的窗户,所以我真的不知道。 – 2010-08-18 11:56:24

+0

在windows终端上键入“man stdio”将导致“man”不被识别为内部或外部命令,可操作程序或批处理文件。“目前还不知道该用户使用哪个系统。 – SigTerm 2010-08-18 12:09:33

2

它们是FILE*类型。它们可以像使用IO功能的文件一样使用。但它们不是'真正'的文件 - 它们是标准的IO流。当你做这样的事情在你的shell(例如对于Linux):

cat something.txt | myprog 

...然后MYPROG可以从标准输入读读something.txt的内容(猫程序的输出)。