2010-08-18 72 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的內容(貓程序的輸出)。