2017-10-04 27 views
5

Chciałbym tylko jeden proces, aby otworzyć urządzenie PTY stworzone przez socat. Użyłem następujących elementów, aby utworzyć urządzenie my_ser, ale można je odczytać/zapisać za pomocą wielu procesów.Wyłącznie blokada Socat do PTY

socat -t 0 INTERFACE:my_nw,type=2 PTY,mode=0777,rawer,link=/dev/my_ser

próbowałem stosować socat -t 0 INTERFACE:my_nw,type=2 PTY,mode=0777,rawer,link=/dev/my_ser,ioctl-void=0x540c używać PTY wyłączną blokadę (TIOCEXCL), ale to nie działa. Widzę, że IOCTL jest wykonywane, ale bez efektu.

używam na Ubuntu

+0

Co próbujesz osiągnąć jako takie? –

+0

Nie należy otwierać urządzenia typu PTY/dev/my_ser przez dwie aplikacje. To urządzenie tłumaczy zapis seryjny na interfejs sieciowy. – Raj

+0

Sprawdź, czy ten test jest przydatny? https://github.com/craSH/socat/blob/c20699fced66696e243d785fdfcd2a94cf11e4cc/test.sh#L10568 –

Odpowiedz

5

zrozumiałem teraz flagę TIOCEXCL bardziej szczegółowo. Aplikacja otwierająca terminal PTY powinna użyć tej flagi, aby uzyskać wyłączną blokadę. Jeśli użyjemy go podczas tworzenia PTY w komendzie społecznej, nie przyniesie to żadnego efektu. Ale nie daje też żadnego błędu.

W ten sposób aplikacja powinna wywołać flagę ioctl i powinna zostać usunięta stąd.