首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用netcat和FIFO

使用netcat和FIFO
EN

Stack Overflow用户
提问于 2019-02-05 09:13:59
回答 1查看 1K关注 0票数 2

我试图从我通过网络连接到的设备中获取诊断数据。它提供了一个很好的严格的专有协议,您可以发送一个3或4个字符的请求,并接收一个<~30字符的响应。需要考虑的事项:

  1. 您必须在请求之间等待20 ms (我希望尽快轮询)
  2. 在发送下一个请求之前,必须等待响应。
  3. 虽然请求必须以Unix行结束,但响应必须以Mac行结束(我知道)。

我想和netcat一起做这个。基本操作简单:

代码语言:javascript
复制
$ echo STA | netcat <IP> <Port>
123498754

STA请求将给出netcat写入stdout的状态词。我也可以这样做:

代码语言:javascript
复制
$ cat | netcat <IP> <Port>
STA          # <- typed input
12345678     # written by netcat
STA          # <- typed input
12345678     # written by netcat

在这里,我可以看到第一个请求花费的时间要长得多:多秒而没有明显的延迟。我想摆脱拖延。于是我的任务开始了:保持netcat打开,

我不能简单地将一个文件输送到netcat,因为我必须等待响应。所以我试着用FIFO来做这个。我创建了两个(/d/pc2dev/d/dev2pc),两者都具有rw权限。我可以在此基础上编写一个脚本,如果我能让基础工作的话。这样做是可行的:

代码语言:javascript
复制
#### 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,响应将被写在另一个上。)

然而,这并不是:

代码语言:javascript
复制
#### 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!

写入普通文件也不起作用:

代码语言:javascript
复制
#### 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/file的写操作似乎是在某处缓冲的,而对stdout的写操作则是立即完成的。(然而,即使在ctrl+c‘’ing等人身上,这个假设的缓冲输出也不会被写入。)

不管是这样还是别的-我怎么才能让它起作用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-05 09:23:47

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

下列方法起作用了

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54530973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档