有人告訴我,每當一個C++程序運行三個文件STDIN,STDOUT和STDERR被打開,他給他的支持此鏈接..是stdin,stdout和stderr文件嗎?
http://tldp.org/LDP/abs/html/io-redirection.html
但我很困惑的天氣,這些流實際上是文件?
任何人都可以澄清?
有人告訴我,每當一個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