/etc/mknod pipe_name p 参数p 必须出现在命名管道名字之后 |
为什么用mknod创建文件,而不用touch呢?
touch 只能创建普通文件,
像管道、字符设备、块设备等特殊文件就要用 mknod 了
管道文件是p打头的
$ mknod pipe1 p
$ ls -l
-rw-rw-r-- 1 macg macg 108 Jan 20 02:21 111-tmp.txt
-rw-rw-r-- 1 macg macg 1269764 Jan 3 11:24 asian_0264_4.mpg
prw-rw-r-- 1 macg macg 0 Jan 20 09:51 pipe1
通过管道文件,可以实现两个程序(可以从不同机器上telnet)实时交互
O 一些进程就可以不断地将信息写入管道文件里
I 另一些进程也可以不断地从管道文件中读取信息
对命名管道文件的读写操作是可以同时进行的
一个管道文件作为两台机器的I/O通信通道,但这个文件不能用touch建立,必须用mknod建立
$ vi in.sh if [ ! -p pipe1 ] then mknod pipe1 p fi while true do read msg 这里read msg的msg是来自done <pipe1 if [ "$msg" = "" ] then continue else echo " $msg" fi done < pipe1 |
看效果
一台机器起用in.sh $ sh in.sh |
另一台执行任意命令,把输出定向到pipe1 |
total 1320 -rw-rw-r-- 1 macg macg 108 Jan 20 02:21 111-tmp.txt prw-rw-r-- 1 macg macg 0 Jan 20 10:23 pipe1 -rw-rw-r-- 1 macg macg 173 Jan 20 03:07 ttt1 -rw-rw-r-- 1 macg macg 64 Jan 20 05:40 ttt.sh this is from anonther user |
$ ls -l > pipe1 $ $ echo "this is from anonther user" > pipe1 $ |
exec 建立的I/O文件,建立用<> ,引用用&
建立 | exec 8<>pipe1 |
引用 | telnet 192.168.1.12 <&8 引用I/O BUFFER要加& |
exec 指令的<>之间不能有空格,否则报错
[macg@localhost tiptest]$ exec 8 <> pipe1 -bash: exec: 8: not found |
[macg@localhost tiptest]$ exec 8<>pipe1 |