有人可以解释为什么会发生这种情况以及如何解决它,以便发送到标准输入的数据与输入到标准输入的数据的行为方式相同。
对于那些看不到 .gif 的人
基本上我有 3 个终端设置。一个正在运行一个 netcat 服务器,它是以下命令。
nc -l 127.0.0.1 4000
终端 2 正在运行一个 netcat 客户端,它是以下命令。
nc 127.0.0.1 4000
当输入客户端时,这基本上意味着将数据输入到该程序的标准输入或文件描述符 0。一旦按下回车键,数据就会显示在服务器上。这是预期的行为。
人们会期望,如果您从键盘以外的其他来源向 stdin 输入数据,只要您在末尾提供一个换行符甚至一个换行符和一个回车符,它的工作方式就相同。
虽然在运行具有以下命令的终端 3 时情况并非如此。
echo "test\n" > /proc/$pid/fd/0
奇怪的是,来自 echo 的数据甚至出现在终端 2 中,但它没有被视为键盘输入,因此没有消息从终端 2 上的 clinet 发送到终端 1 上的服务器。
我的结论是胡说八道。