Сетевое символьное устройство
Материал из Xgu.ru
- Короткий URL: serial-over-ip
Сервер:
$ while true; do sudo socat TCP4-LISTEN:54321,reuseaddr file:/dev/ttyS0,nonblock,raw,echo=0 ; done &
Клиент:
%# mkdir /dev/pts ; mount -t devpts devpts /dev/pts %# while true do socat PTY,link=/dev/vmodem0,raw,echo=0,waitslave TCP4:127.0.0.1:54321; done
Если нужно чтобы создаваемый файл принадлежал пользователю:
while true; do socat PTY,link=/dev/vmodem0,waitslave,user=uucp,group=uucp,mode=664,raw,echo=0 TCP4:127.0.0.1:54321; done &
В приведённом примере файл будет принадлежать пользователю uucp и группе uucp.
Как выглядит /dev/vmodem0:
$ ls -l /dev/vmodem0 lrwxrwxrwx 1 root root 10 2007-05-17 22:18 /dev/vmodem0 -> /dev/pts/8 $ ls -l dev/pts/8 crw-rw-r-- 1 uucp uucp 136, 7 2007-05-17 22:18 /dev/pts/8
Определение имени файла оригинала по имени символьной ссылки:
root@uucp:~# cat /usr/sbin/Login.chap #!/bin/sh pts_to_vmodem() { TTY=`tty` ls -l /dev/vm* | grep $TTY | awk '{print $9}' } VM=`pts_to_vmodem` case "$VM" in /dev/vma11) mesg n stty -tostop exec /usr/sbin/pppd debug crtscts 10.0.84.1:10.0.84.2 \ netmask 255.255.255.252 ipparam dialup5484927 unit 84000 ;; /dev/vmb16) mesg n stty -tostop exec /usr/sbin/pppd debug crtscts 10.0.84.5:10.0.84.6 \ netmask 255.255.255.252 ipparam gsm2 debug unit 84004 ;; /dev/vmb15) mesg n stty -tostop exec /usr/sbin/pppd debug crtscts 10.0.84.9:10.0.84.10 \ netmask 255.255.255.252 ipparam gsm1 unit 84008 ;; /dev/vmb08) mesg n stty -tostop exec /usr/sbin/pppd debug crtscts noauth 10.0.84.13:10.0.84.14 \ netmask 255.255.255.252 ipparam bnkkyivvol unit 84012 ;; /dev/vma08) mesg n stty -tostop exec /usr/sbin/pppd debug crtscts noauth 10.0.84.17:10.0.84.18 \ netmask 255.255.255.252 ipparam bnktransmarket unit 84016 ;; /dev/vma10) mesg n stty -tostop exec /usr/sbin/pppd debug crtscts noauth 10.0.84.21:10.0.84.22 \ netmask 255.255.255.252 ipparam bnkvch1 unit 84020 ;; /dev/ttyS1) mesg n stty -tostop exec /usr/sbin/pppd debug crtscts pppkorsun:pppbarokorsun domain example.com \ netmask 255.255.255.252 unit 0 ;; esac