在 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
读取,这是 printf
的 a\nb\n
输出,因此您应该期望其中一个进程读取 a
,另一个读取 b
.
值得指出的是,不会让两个程序读取两行输入。无论哪个程序首先读取,都会看到该位输入。如果您确实需要将相同的输入行转到两个单独的程序,您将需要一个将输入复制到两个不同文件或文件描述符的程序。执行此操作的 Unix 实用程序的一个示例是 tee
。如果需要,您可以检查它是如何实现的以获取更多详细信息。
我读到 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
读取,这是 printf
的 a\nb\n
输出,因此您应该期望其中一个进程读取 a
,另一个读取 b
.
值得指出的是,不会让两个程序读取两行输入。无论哪个程序首先读取,都会看到该位输入。如果您确实需要将相同的输入行转到两个单独的程序,您将需要一个将输入复制到两个不同文件或文件描述符的程序。执行此操作的 Unix 实用程序的一个示例是 tee
。如果需要,您可以检查它是如何实现的以获取更多详细信息。