Сетевое символьное устройство
Материал из 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