我正在尝试创建一个虚拟本地 com 端口,使用以下命令通过 TCP 将所有内容转发到远程计算机:
sudo socat GOPEN:/dev/ptyp0,ignoreeof TCP:192.168.254.106:8080
2018/09/08 21:48:51 socat[10860] E open("/dev/ptyp0", 012, 0666): Resource temporarily unavailable
这是新安装的 OS X High Sierra,所以我怀疑我是否耗尽了资源。
sudo lsof /dev/ptyp0
什么都没有显示...即使我尝试 ptyp1、ptyp2 等,也会得到相同的结果。
答案1
您不能只是打开一个随机 pty 并期望它能正常工作。(实际上,您应该依次打开它们,直到找到一个空闲的 pty)相反,请使用正确的socat
语法:
socat PTY,link=/tmp/mytty TCP:192.168.254.106:8080
这将打开可用伪终端的主端,在从/tmp/mytty
端下建立符号链接(根据需要修改),并在主端和远程 TCP 端口之间转发。
您现在可以/tmp/mytty
像使用普通 tty 一样使用(或从其链接到的从属 pty)。(“虚拟本地 com 端口”听起来很像 Windows 术语)。
顺便说一句,这将在所有支持伪终端的平台上工作,因为socat
使用适合平台的方法。
编辑
您在运行的 Java 程序中看到的选项完全取决于您运行的 Java 程序,对此我一无所知(您也没有告诉我们任何信息)。Java 程序完全有可能有其他选项来告知它有关其他 tty 的信息。也可能它没有这样的选项。
下面的文件/dev
是名为 的特殊文件系统的一部分devfs
,它显示了内核可用的设备。显然您不能在其上创建符号链接。
因此,如果您的 Java 程序所做的只是扫描文件/dev/cu.*
,那么您就不走运了。
/dev/cu
您始终可以尝试找到 Java 程序的源代码并进行更改。或者甚至修补二进制文件(用其他内容替换字符串)。