mknod创建命名管道(I/O缓存)


 

 /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 msgmsg是来自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
原文地址:https://www.cnblogs.com/noobkey/p/3125579.html