Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 确保从多个管道(STDOUT)完全接收每条管线_Bash_Shell_Ssh_Stdout_Pipe - Fatal编程技术网

Bash 确保从多个管道(STDOUT)完全接收每条管线

Bash 确保从多个管道(STDOUT)完全接收每条管线,bash,shell,ssh,stdout,pipe,Bash,Shell,Ssh,Stdout,Pipe,前几天我问是否保持了数据的完整性(刷新的数据) 即使有多条管道流入 本地主机的STDIN。如果刷新的数据很大,答案是否定的。 但我想保证每一条线的两端都是平齐的 完整地传递给单个标准输入,不会与 来自其他管道的数据。有什么办法吗?如何做到这一点 (请注意,如果在本地创建多个stdin,则可以完成此操作。 但如果我可以通过 所以我的问题集中在有 本地主机上只有一个STDIN,其中有多个(STDOUT)管道。)这可以通过以太网中使用的拥塞回退系统来完成 首先,为每个管道指定一个唯一的分隔符。在任何

前几天我问是否保持了数据的完整性(刷新的数据) 即使有多条管道流入 本地主机的STDIN。如果刷新的数据很大,答案是否定的。

但我想保证每一条线的两端都是平齐的 完整地传递给单个标准输入,不会与 来自其他管道的数据。有什么办法吗?如何做到这一点

(请注意,如果在本地创建多个stdin,则可以完成此操作。 但如果我可以通过 所以我的问题集中在有
本地主机上只有一个STDIN,其中有多个(STDOUT)管道。)

这可以通过以太网中使用的拥塞回退系统来完成

首先,为每个管道指定一个唯一的分隔符。在任何管道的内容中,此分隔符都不能显示为未缩放。现在,使用以下伪代码:

  • 检查其他进程的分隔符;当单个其他进程的分隔符出现奇数时,请稍候
  • 写入分隔符字符
  • 检查其他进程是否也写入了不匹配的分隔符。如果是这样的话,退出一个随机的(增加的)数量并返回到第一步
  • 写数据
  • 写入分隔符字符

这将确保,尽管你会有一些垃圾,但每一条消息最终都会通过。

这可以通过以太网中使用的拥塞回退系统来完成

首先,为每个管道指定一个唯一的分隔符。在任何管道的内容中,此分隔符都不能显示为未缩放。现在,使用以下伪代码:

  • 检查其他进程的分隔符;当单个其他进程的分隔符出现奇数时,请稍候
  • 写入分隔符字符
  • 检查其他进程是否也写入了不匹配的分隔符。如果是这样的话,退出一个随机的(增加的)数量并返回到第一步
  • 写数据
  • 写入分隔符字符

这将确保,尽管您会收到一些垃圾邮件,但所有邮件最终都会通过。

谢谢。我不熟悉这个算法,但它的处理速度会不会慢很多?这种算法必须逐字节检查是否存在分隔符,并在必要时等待。它还失去了逐行处理流的便利性,因为它必须跟踪以前的输入。(顺便说一句,您描述的算法是拥塞避免算法())?@otz:是的,它可能会慢一些,但是如果您有一个集线器,您必须选择令牌传递方法或退避算法。要回答你的另一个问题,不,这不是TCP算法,而是更接近(正如我提到的)以太网指数退避算法。请参阅。关于令牌传递的另一个注意事项:一种方法是创建进程的确定性顺序,并使每个进程仅在前一个进程完成后启动。@Borealid-Hmm。了解此算法似乎非常有用。对于这个特殊的案例,我想知道是否还有其他更直接(实现)的方法。也许网络中的最小缓冲区大小(如果已知)可以用来保证行内容的完整性。@otz:我认为管道上没有最小写入大小。。。简单易用的实现方法就是我上面所说的排序流程输出的方法。谢谢。我不熟悉这个算法,但它的处理速度会不会慢很多?这种算法必须逐字节检查是否存在分隔符,并在必要时等待。它还失去了逐行处理流的便利性,因为它必须跟踪以前的输入。(顺便说一句,您描述的算法是拥塞避免算法())?@otz:是的,它可能会慢一些,但是如果您有一个集线器,您必须选择令牌传递方法或退避算法。要回答你的另一个问题,不,这不是TCP算法,而是更接近(正如我提到的)以太网指数退避算法。请参阅。关于令牌传递的另一个注意事项:一种方法是创建进程的确定性顺序,并使每个进程仅在前一个进程完成后启动。@Borealid-Hmm。了解此算法似乎非常有用。对于这个特殊的案例,我想知道是否还有其他更直接(实现)的方法。也许网络中的最小缓冲区大小(如果已知)可以用来保证行内容的完整性。@otz:我认为管道上没有最小写入大小。。。简单易用的实现方法就是我上面所说的排序流程输出的方法。