使用netcat的与FIFO的

问题描述 投票:1回答:1

我试图从与我通过网络连接的设备获取诊断数据。它提供了其中发送一个3或4个字符的请求和接收<〜30字符响应一个很好的紧properiatrian协议。事情要考虑:

  1. 你必须请求之间等待20毫秒(我想尽可能快地轮询)
  2. 你必须等待响应发送下一个请求之前
  3. 虽然要求必须在Unix行结束而终止,响应来与Mac产品线两端(我知道)

我试图用netcat来做到这一点。基本操作很简单:

$ echo STA | netcat <IP> <Port>
123498754

该STA请求会给你的netcat写到标准输出状态字。我也可以这样做

$ cat | netcat <IP> <Port>
STA          # <- typed input
12345678     # written by netcat
STA          # <- typed input
12345678     # written by netcat

在这里我可以看到,第一个请求花费相当长的时间:多秒,而没有noticable延迟。我想摆脱的延迟。所以我的任务会:保持开放的netcat!

我不能只是管道的文件到netcat的,因为我不得不等待您的答复。所以我想做到这一点使用的FIFO。我创建了两个(/ d / pc2dev和/ d / dev2pc),都与RW权限。我可以写依据,如果我能得到基础工作的脚本。这工作

#### SHELL 1 #############################
$ tail -f /d/pc2dev | netcat <IP> <Port> | tr '\r' '\n'
12345678654   # written by netcat with delay
12345678654   # written by netcat as soon as I send the request on shell 2
12345678654   # ditto
#### SHELL 2 #############################
$ echo STA > /d/pc2dev
$ echo STA > /d/pc2dev
$ echo STA > /d/pc2dev

(不TR,响应将被写入了彼此。)但是,这并不:

#### SHELL 1 #############################
$ tail -f /d/pc2dev | netcat <IP> <Port> | tr '\r' '\n' > /d/dev2pc
#### SHELL 2 #############################
$ echo STA > /d/pc2dev
$ echo STA > /d/pc2dev
#### SHELL 3 #############################
$ cat /d/dev2pc
# expecting output here - none comes!

写一个正常的文件也不起作用:

#### SHELL 1 #############################
$ tail -f /d/pc2dev | netcat <IP> <Port> | tr '\r' '\n' > log.txt
#### SHELL 2 #############################
$ echo STA > /d/pc2dev
$ echo STA > /d/pc2dev
$ cat log.txt
# nothing

看来,写操作FIFO /文件缓存的地方,而到​​stdout写立即完成。 (然而,即使在CTRL + c'ing的netcat等,这个假设的缓冲输出没有得到书面)。

无论是像或以其他方式 - 我怎么能得到这个工作?

bash fifo netcat
1个回答
1
投票

尝试管道到tee而不是重定向输出,man 1 tee,看看会发生什么。

以下工作

$ tail -f /d/pc2dev | stdbuf -i0 -o0 netcat <IP> <Port> | stdbuf -i0 -o0 tr '\r' '\n' > /d/dev2pc

© www.soinside.com 2019 - 2024. All rights reserved.