#(File Descriptors) FD,文件描述符,文件句柄
#使用文件描述符管理打开的文件
#当一个文件FD未被释放,删除源文件也不会影响
ls /proc/$$/fd #$$ 当前进程,查看打开的文件描述符
exec 6<> file #手动定义打开文件描述符
echo "test" >> /proc/$$/fd/6 #通过文件描述符写入数据
exec 6<&- #关闭文件
#管道也是文件,但只能查看一次,不像静态文件
rpm -qa|grep bash #匿名管道 只能在一个终端
mkfifo /tmp/fifo1 #命名管道 可以跨终端 命名管道可以视为一个进程的输入,用来另外一个进程的输出
#!/usr/bin/bash
thread=5
tmp_fifofile=/tmp/$$.fifo
mkfifo $tmp_fifofile
exec 8<> $tmp_fifofile
rm $tmp_fifofile
for i in `seq $thread`
do
echo >&8 #&8简写(/proc/$$/fd/8) 文件描述符
done
for i in {1..254}
do
read -u 8 #-u 从文件描述符读取数据
{
ip=192.168.201.130
ping -c1 -W1 $ip &>/dev/null
if [ $? -eq 0 ];then
echo "$ip is up"
else
echo "$ip is down"
fi
echo >&8 #再写入数据 保证线程梳理
}&
done
wait
echo "finish ...."