簡體   English   中英

是stdin,stdout和stderr文件嗎?

[英]Are stdin, stdout, and stderr Files?

有人告訴我,每當運行C ++程序時,都會打開三個文件STDIN,STDOUT和STDERR,並在他的支持下給出了此鏈接。

http://tldp.org/LDP/abs/html/io-redirection.html

但是我很困惑,這些流實際上是文件嗎?

任何人都可以澄清嗎?

如果在終端上輸入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可以通過從STDIN讀取來讀取something.txt的內容(cat程序的輸出)。

在POSIX系統上,流是特殊的文件描述符。 Windows有它自己的err ..東西,但是它們也是那里的文件描述符。 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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM