我需要从stdin读取十六进制数据,将其转换为二进制,使用netcat
发送,接收回复,转换回十六进制并打印到stdout。我这样做:
# xxd -r -p | nc -u localhost 12345 | xxd
然后以十六进制输入我的数据,然后按Enter键。但是我没有发送它,直到我按Ctrl+D
,所以我收到回复后无法发送另一个数据包。看起来xxd -r -p
没有写二进制数据,直到给出EOF
为止。有没有办法让它在换行后写?
答案 0 :(得分:2)
默认情况下,大多数* nix实用程序在交互模式下会进行行缓冲(例如stdin / stdout直接连接到终端仿真器)。但是当处于非交互模式时(例如stdin / stdout连接到管道)通常使用更大的缓冲区 - 我认为8k左右是典型的,但这在很大程度上取决于实现/发布。
如果有可用的话,您可以使用GNU stdbuf
utility强制将给定流程缓冲到行模式:
stdbuf -oL xxd -r -p | nc -u localhost 12345 | xxd