socat gibt unter OS X High Sierra "Ressource vorübergehend nicht verfügbar" aus

504
Daniele Testa

Ich versuche, einen virtuellen lokalen Com-Port zu erstellen, der alles über TCP mit einem folgenden Befehl an einen Remote-Computer weiterleitet:

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 

Dies ist ein frisch installiertes OS X High Sierra. Ich bezweifle, dass ich keine Ressourcen mehr habe.

sudo lsof /dev/ptyp0 

Zeigt nichts ... und ich bekomme dasselbe Ergebnis, auch wenn ich ptyp1, ptyp2 usw. versuche.

0
Warum versuchen Sie, eine Gerätedatei zu öffnen, die nicht existiert? Kopieren Sie nur einen Befehl, den Sie aus einer Online-Quelle nicht verstehen? Es könnte von Linux oder einer anderen Unix-Variante stammen, die Pseudo-TTY-Gerätedateien anders benennt als die BSD-basierte Tradition von macOS. Möglicherweise müssen Sie Pseudo-TTY-Gerätedateien im macOS-Stil verwenden. Spiff vor 5 Jahren 0
@Spiff Sie sind sich nicht sicher, was Sie mit "nicht existierende Datei" meinen? Diese Datei existiert NICHT, da "ls / dev / ptyp *" deutlich wird. Daniele Testa vor 5 Jahren 0

1 Antwort auf die Frage

1
dirkt

Sie können nicht einfach ein zufälliges Pty öffnen und erwarten, dass es funktioniert. (Eigentlich solltest du jede der Reihe nach öffnen, bis du eine findest, die frei ist.) Verwende stattdessen die richtige socatSyntax dafür:

socat PTY,link=/tmp/mytty TCP:192.168.254.106:8080 

Dadurch wird die Master-Seite eines verfügbaren Pseudo-Terminals geöffnet, es wird ein Symlink unter /tmp/myttyder Slave-Seite hergestellt (gegebenenfalls geändert ) und zwischen der Master-Seite und Ihrem Remote-TCP-Port weitergeleitet.

Sie können jetzt /tmp/mytty(oder das damit verbundene Slave-Pty) wie ein normales tty verwenden. ("Virtual local com-port" hört sich verdächtig an wie ein Windows-Begriff).

Übrigens, dies funktioniert auf allen Plattformen, die Pseudo-Terminals unterstützen, da sie socatdie für die Plattform geeignete Methode verwendet.

Bearbeiten

Was auch immer Sie als Option in dem von Ihnen ausgeführten Java-Programm sehen, hängt vollständig von dem von Ihnen ausgeführten Java-Programm ab, von dem ich nichts weiß (und Sie haben uns nichts davon erzählt). Es ist durchaus möglich, dass das Java-Programm zusätzliche Optionen hat, um es über andere Betriebssysteme zu informieren. Es ist auch möglich, dass es keine derartigen Optionen gibt.

Dateien darunter /devsind Teil eines speziellen Dateisystems, devfsdas die für den Kernel verfügbaren Geräte anzeigt. Anscheinend dürfen Sie keine Symlinks darauf erstellen.

Wenn Ihr Java-Programm also nur nach Dateien sucht /dev/cu.*, haben Sie kein Glück.

Sie können immer versuchen, die Quelle für Ihr Java-Programm zu finden und es zu ändern. Oder sogar die Binärdatei patchen (den String /dev/cudurch etwas anderes ersetzen ).

Ich habe den Befehl ausprobiert und es hätte "funktionieren können". Ich sehe jedoch / tmp / mytty immer noch nicht als Option in einem von mir ausgeführten Java-Programm. Die einzige Option, die ich dort sehe, ist "/dev/cu.Bluetooth-Incomming-Port". Vielleicht brauche ich ein paar zusätzliche Parameter oder Symlinks, damit OS X (oder Java) über den neuen "Port" informiert wird, der gerade erstellt wird? Daniele Testa vor 5 Jahren 0
Ich habe versucht, "sudo socat PTY, link = / dev / cu.esp8266 TCP: 192.168.254.106: 8080" auszuführen, aber "die Operation war nicht zulässig". Daniele Testa vor 5 Jahren 0
Ja, es scheint, dass das Java-Programm einfach /dev/cu.* auflistet. Jetzt bin ich sicher, warum ich keine Dateien in / dev / als root unter OS X erstellen kann durch :( Daniele Testa vor 5 Jahren 0
Wie gesagt, "devfs" ist eine andere Art von Dateisystem - es gibt Ihnen Zugriff auf Kernel-Ressourcen. Anscheinend sind Symlinks in diesem Dateisystem nicht implementiert, dh root oder nicht, Sie können keine erstellen. dirkt vor 5 Jahren 0
Klar macht es Sinn. Wenn es jedoch keine "Standardmethode" für Anwendungen gibt, um eine Liste von ttys vom Betriebssystem abzurufen (mit Ausnahme der Auflistung von /dev/cu.*), sollte es eine Möglichkeit geben, solche Links zu erstellen. Ich bezweifle, dass Apple dieses "Feature" einfach ignoriert hat. Daniele Testa vor 5 Jahren 0
Die "Standardmethode" in BSD besteht darin, Dateien zu bearbeiten. Wenn Ihre Java-Anwendung dies nicht unterstützt, und der Meinung ist, dass der Benutzer durch die Auswahl von Mustern, die nach Ansicht des Programmierers für ausreichend gehalten werden, vom Benutzer gebeten werden muss, liegt dies an der Java-Anwendung. Finden Sie den Programmierer und schlagen Sie ihn mit einem Stock. Und Sie können Apple gerne vorschlagen, dass sie das devfs-Dateisystem ändern (oder es als Quellcode öffnen, damit andere Leute es ändern können). Übrigens, Linux hat vor Jahren von devfs zu devtmpfs (und udev) gewechselt, wo Symlinks gut funktionieren. dirkt vor 5 Jahren 0
Und es sieht so aus, als würden symbolische Links verwendet (https://stackoverflow.com/questions/21175410/managing-serial-port-names-in-mac-osx-with-symlinks), aber Apple hat es nicht zugelassen. dirkt vor 5 Jahren 0