在 Linux/Unix 中同时使用 2 个程序访问标准输入

Accessing stdin with 2 programs at the same time in Linux/Unix

我读到 stdin 是 Linux/Unix 中的一个文件。那么,2 个程序可以同时访问同一个标准输入吗?如果是,那么 C/C++ 如何做到这一点??

是的,这是可能的。它不是特定编程语言的功能,它是您 运行 使用的操作系统的功能。

看看这个 shell 脚本示例:

printf 'a\nb\n' | { { read x && echo $x; } <&0 & { read y && echo $y; }; }

这里,{ read x && echo $x; }将(很可能)作为一个单独的进程执行,同样适用于{ read y && echo $y; }。两个进程都从相同的 stdin 读取,这是 printfa\nb\n 输出,因此您应该期望其中一个进程读取 a,另一个读取 b.

值得指出的是,不会让两个程序读取两行输入。无论哪个程序首先读取,都会看到该位输入。如果您确实需要将相同的输入行转到两个单独的程序,您将需要一个将输入复制到两个不同文件或文件描述符的程序。执行此操作的 Unix 实用程序的一个示例是 tee。如果需要,您可以检查它是如何实现的以获取更多详细信息。