- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我知道 stdin 和 stdout(至少在 UNIX 的说法中)是流缓冲区,stdout 用于从程序输出到控制台(或者然后由 shell 等通过管道传输),而 stdin 是用于程序的标准输入..
那么,至少在 macOS 上,为什么它们可以互换使用(stdout 和 stdin,反之亦然?
例子:
如果您运行 cat/dev/stdin
然后输入一些内容,它会回显。以 cat/dev/stdout
运行命令会做同样的事情。
同样,echo "Hey There">/dev/stdout
和 echo "Hey There">/dev/stdin
都输出 'Hey There'到终端。
它也适用于 C++:
例子:
#include <iostream>
#include <string>
#include <fstream>
int main(int argc, const char * argv[]) {
std::string echoString;
std::fstream stdoutFile;
stdoutFile.open("/dev/stdout");
stdoutFile << "Hey look! I'm using stdout properly!\nNow You trying using it wrongly: " << std::endl;
stdoutFile >> echoString;
stdoutFile << "You Typed: " << echoString << std::endl;
}
出现提示时,输入一个单词,然后按 EOF (Ctrl+D) 即可正常工作。
最佳答案
因为,通常情况下,当从交互式终端调用程序时,没有重定向,标准输入和标准输出都连接到同一终端设备,例如 /dev/tty
(实际设备名称因操作系统而异)。
终端设备是一个读/写设备。从终端设备读取读取终端输入。写入终端设备会在终端上生成输出。
您仍然有离散的文件描述符 0 和 1,但它们连接到同一设备。
可以将其视为单个双向管道,dup
文件描述符 0 和 1。
Linux 的行为方式相同(您可以echo Foo >/dev/stdin
并查看输出):
$ ls -al /proc/self/fd/[01]
lrwx------. 1 mrsam mrsam 64 Nov 22 21:34 /proc/self/fd/0 -> /dev/pts/1
lrwx------. 1 mrsam mrsam 64 Nov 22 21:34 /proc/self/fd/1 -> /dev/pts/1
因此,对于这个过程,文件描述符 0 和 1 连接到 /dev/pts/1
,这是同一个伪终端设备。无论您是从文件描述符 0 还是文件描述符 1 读取,您最终都会从相同的底层 /dev
设备读取,因此您使用哪个实际文件描述符没有区别。
当然,这取决于操作系统。其他基于 POSIX 的操作系统可能会以其他方式实现其标准输入和输出,您实际上无法写入标准输入并从标准输出读取。
关于c++ - 为什么 stdin 和 stdout 看起来可以互换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40755048/
假设我有两个名为Student和Employee的结构(或类),并且Student和Employee具有完全相同的成员。 我的问题是,为什么我不能执行以下操作: Student s; Employee
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Hashset vs Treeset 你可以使用 HashSet和TreeSet可以互换吗?如果我交换TreeSet
页面上有一个值为“button1”的按钮。当按下时,它必须删除自身并添加值为“button2”的新按钮。当按下“button2”时,它必须删除自身并添加“button1”回来。有点无限循环。 我知道只
以下模板 template int compute(Data d, Number n) { if(n > 10) SLOW(d) if(n (data)模板。除了代码重复,comput
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我是一名优秀的程序员,十分优秀!